2017-02-09 74 views
2

我有一個抽象類C#派生類型組合框

public abstract class PairingMethod : IPairingMethod 
{ 
    virtual string Name { get; } = "Default Pairing"; 

    protected ICollection<IPlayer> PlayersToPair { get; set; } 


    protected PairingMethod(ICollection<IPlayer> players) 
    { 
     PlayersToPair = players; 
    } 

    public virtual void GeneratePairingsForRound(IRound round) 
    { 
     throw new System.NotImplementedException(); 
    } 

} 

現在我試圖創建一個基於從以上基類派生的所有類型的組合框。我創建了組合框,它使用類名稱作爲項目,但是當組合框更改事件被觸發時,我需要知道選擇了哪個派生類。然後我可以創建該類的一個實例,用於生成配對。

我嘗試使用PairingMethods作爲項目實現我自己的組合框,但無法使其工作。

任何意見/建議?

Ç

+2

1.請正確格式化您的代碼,縮進是在這裏的所有地方。 2.顯示你的組合框代碼,這是這裏的重要一點。 – DavidG

+0

''它使用類名稱作爲項目[...]我需要知道哪個派生類被選中「 - 這不就是當前組合框的選定值嗎?目前還不清楚問題在哪裏。 – David

+0

對不起大衛,我可以從選定的項目獲得索引。但是,將選擇的索引轉換爲派生類的乾淨方式是什麼? – Jack

回答

1

感謝旺角Zhus建議我做了以下

public class PairingComboBox : ComboBox 
{ 
    private List<Type> _availableMethod = DerivedTypes.FindAllDerivedTypes<PairingMethod>(); 

    public PairingComboBox() 
    { 
     DataSource = DerivedTypes.FindAllDerivedTypes<PairingMethod>(); 
     DisplayMember = "Name"; 
    } 
} 

public static IPairingMethod CreateInstanceBinder 
       (string pairingMethodName, ICollection<IPlayer> players) 
{ 
     var t = Type.GetType(pairingMethodName + ",Pairings"); 
     return (PairingMethod)Activator.CreateInstance(t, players); 
} 

我所說的CreatenIstanceBuilder組合框的變化時。傳入聯盟的球員。