Windows窗体应用程序中的通用组合框

本文关键字:组合 窗体 应用程序 Windows | 更新日期: 2023-09-27 18:21:52

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

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

那么GComboBox将不会出现在Windows窗体的工具箱中。我如何使它出现在工具箱中,这样我就可以把它放在那里,就像我可以放任何其他派生的非泛型组合框一样?

Windows窗体应用程序中的通用组合框

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

  • 使用典型的ComboBox而不是GComboBox,然后转到Form1.Designer.cs并用ComboBox替换GComboBox

如果要从工具箱中显式拖动,则必须创建类库(来自visualstudio新项目)并将其添加到工具箱中将自定义控件dll添加到Visual Studio ToolBox

您可以使用一个具有属性的常规子类来代替通用控件:

    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事件。这篇文章建议你听组合框消息,但大多数帖子都告诉你,无论如何,你都可以控制添加项目。。