2017-02-09 80 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组合框的变化时。传入联盟的球员。