Windows窗体应用程序中的通用ComboBox

时间:2014-09-14 11:12:35

标签: c# .net winforms generics combobox

我需要一个从ComboBox派生的类,它只接受某些特定类型的对象。所以,我需要一个通用的ComboBox。如果我宣布一个像这样的新类:

public class GComboBox <Type> : ComboBox
{
 // Some code
}

然后GComboBox将不会出现在Windows窗体的工具箱中。如何让它出现在工具箱中以便我可以将它放在那里,因为我可以放置任何其他派生的非通用ComboBox?

2 个答案:

答案 0 :(得分:0)

使用此GComboBox的最简单方法是:

  • 使用典型的ComboBox代替GComboBox,然后转到 Form1.Designer.cs 并将GComboBox替换为ComboBox

如果您想从工具箱中明确拖动,则必须创建类库(来自visual studio new projet)并将其添加到工具箱中 Adding Custom Controls dll to Visual Studio ToolBox

答案 1 :(得分:0)

您可以使用带有Property的常规子类代替通用Control:

    public class GComboBox : ComboBox
    {
        public Type myType { get; set; }

        public GComboBox(Type type) { myType = type; }
        public GComboBox() { myType = typeof(int); }
        public override string ToString()
        {
            return "GComboBox<" +  myType.ToString() + ">";
        }
    }

这将按预期显示在工具箱中。它默认为System.Int32,您应该在放置它之后进行调整,例如在Form构造函数..

    InitializeComponent();
    gComboBox1.myType =    typeof(Bitmap);

不确定如何阻止添加错误类型..没有ItemAdded事件。 This Post建议收听ComboBox消息,但大多数帖子都告诉您无论如何都可以控制添加项目..