屬性我有一個非常大量的小的類或結構的。這些類的實現細節並不重要,但對於每個類都會有一些我想公開的簡單的內置數據類型屬性,以便它們可以在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
對象,每一個類標籤上,與突出部隱藏。但是隨後類的數量呈指數級增長,所以我正在轉向其他解決方案,可能會使用屬性和反思。我只是不確定如何開始。
我心目中現在是一樣的東西:
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
}
}
而且在我的模型對象,我可以使用屬性添加必要的元數據:
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; }
}
當然我需要給教我的控制如何解釋這些屬性。現在我的實際問題。
具體問題
- 將這項工作?
- 有沒有解決這個問題我俯瞰一個更好的選擇?
- 如何處理在界面上放置或控件的佈局?
- 最後,我從未使用過自定義屬性。任何讓我開始的好例子?
謝謝,你釘了它!事實上,看起來非常簡單,我期待它變得更加複雜。 – 2012-02-22 00:27:36