2015-07-21 14 views
1

我使用C#爲Windows遊戲創建了一個編輯器。 有很多情況下,我想填充一個組合框與所有可能的派生類型的父類。例如,你要添加一個物品,所以你從列表中選擇「武器,裝甲,彈藥,消耗品,貨幣等」。 (這些都是從「項」派生的所有類)如何使用類型填充組合框

目前,我手動定義列表中每個類型的一個成員的枚舉,然後使用枚舉來填充組合框中的選項。然後我需要兩個字典:一個從枚舉轉到Type,一個從Type轉到一個枚舉。通過這種方式,我可以刷新組合框以顯示選中項目的類型,並且當組合框接受用戶輸入時,我可以用新實例化項目替換項目。

這一切工作正常,它只是似乎很可怕的代碼手動輸出一個枚舉兩個字典,只是顯示和從代碼庫中已經存在的事情列表中選擇。

我該如何做得更好?

+0

這似乎是一個反思的完美情況。 –

回答

1

您可以使用反射來獲取所有基類型爲Item的類類型並使用該數據填充ComboBox;然後告訴它哪個屬性Type要顯示給用戶(可能是Name)。

foreach (var item in Assembly.GetExecutingAssembly().GetTypes() 
          .Where(x => x.BaseType == typeof(Item))) 
{ 
    comboBox1.Items.Add(item); 
} 

comboBox1.DisplayMember = "Name";