从ComboBox派生

时间:2014-09-14 16:28:46

标签: c# .net winforms inheritance combobox

我需要从ComboBox派生一个类并更改其Items属性。这是我的代码:

public class MyComboBox2 : ComboBox
{
    private MyObjectCollection MyItems;

    public MyComboBox2()
    {
        MyItems = new MyObjectCollection(this);
    }

    //new public ComboBox.ObjectCollection Items
    new public MyObjectCollection Items
    {
        get {
            return MyItems;
        }
    }


}

public class MyObjectCollection : ComboBox.ObjectCollection
{
    public MyObjectCollection(ComboBox Owner) : base(Owner)
    {

    }

    new public int Add(Object j)
    {
        base.Add(j);
        return 0;
    }


}

如您所见,我正在创建一个源自MyComboBox2的新类ComboBox。该类应该具有新的Items属性,该属性的类型为MyObjectCollection而不是ComboBox.ObjectCollection。我在类型myComboBox21的表单上有一个名为MyComboBox2的组合框。当我想在我的ComboBox中添加一个新对象时,我会执行如下代码:myComboBox21.Items.Add("text"); 在这种情况下,我最终执行了自己实现的Add MyObjectCollection方法。但是,表单上的ComboBox最终不会包含值&text;'。我附加调试器的屏幕截图显示ComboBox值。 MyComboBox21包含Items属性(其中包含"文字",如屏幕截图" 2.png"所示),其中包含base.Items(其中不包含" text"如" 1.png")所示。所以,显然,MyComboBox21包含自己的Items属性(我可以插入),以及它的基类Items属性,它在Windows窗体中显示。我能做什么才能用自己的方法成功添加到comboBox?由于我的ComboBox有2个Items属性,我可以指定哪些Items属性的值应该在ComboBox中显示? enter image description here enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

只需快速查看代码:

原始Item索引声明为

     virtual Object this[int index] {...}

new 关键字是否可以通过实现中的 override 进行交换,以使运行时选择目标代码?