コンテキストヒント
は、私は小さなクラスまたは構造の非常に多くを持っています。これらのクラスの実装の詳細は重要ではありませんが、これらのクラスのそれぞれについて、WinFormsコントロールで編集できるように公開する簡単なビルトインデータ型プロパティがいくつかあります。これらは、クラスごとに完全に異なるでしょう。たとえば:
class SleepAction : IGameAction
{
public float Duration { get; set; }
}
class TeleportCharacterAction : IGameAction
{
public string CharacterId { get; set;
public string DestinationRoomId { get; set; }
public Vector2 DestinationPosition { get; set; }
}
問題は、私はこれらのオブジェクトタイプのすべてを編集することができ単一のWinFormsコントロールを持っていると思ったということです。一番上にあるすべてのクラスタイプのドロップダウンリストがあり、このドロップダウンリストからアイテムを選択すると、そのタイプのプロパティに合わせてインターフェイスが変更され、データを格納するそのタイプのインスタンスが作成されます。
最初は、TabControl
オブジェクトをクラスごとに1つずつタブを非表示にして、これらの各インターフェイスを手作業で作成することを検討していました。しかし、クラスの数が急激に増加したので、おそらく属性とリフレクションを使用して、他の解決策に目を向けています。私はどのように始めるのか分かりません。
私が考えていることは、今あるようなもの:私は必要があると思います。もちろん、
class SleepAction : IGameAction
{
[FieldLabel("Duration")]
[FieldType("NumericSpinner")]
public float Duration { get; set; }
}
class TeleportCharacterAction : IGameAction
{
[FieldLabel("Character")]
[FieldType("CharacterList")]
public string CharacterId { get; set;
[FieldLabel("Room")]
[FieldType("RoomList")]
public string DestinationRoomId { get; set; }
[FieldLabel("Position")]
[FieldType("VectorPicker")]
public Vector2 DestinationPosition { get; set; }
}
:
class ActionEditorControl : UserControl
{
void ChangeEditorMode(Type type)
{
// Clear all GUI interface
// Create object of type Type with default constructor
// Use Type metadata to generate new GUI interface
// Databind new interface to object properties
}
object GetObject()
{
// Return current object
}
}
そして、私は必要なメタデータを追加するための属性を使用することができ、私のモデルオブジェクトに
これらの属性をどのように解釈するかを教えてください。今私の実際の質問のために。固有の質問
- うこの作品?
- 私が見落としているこの問題を解決するためのより良い方法がありますか?
- インターフェイスのコントロールの配置やレイアウトを処理するにはどうすればよいですか?
- 最後に、カスタム属性を使用したことはありません。私を始めるための良い例がありますか?
ありがとう、あなたはそれを釘付け!実際にはかなりシンプルに見えますが、もっと複雑になることを期待していました。 –