Windows窗体应用程序中的通用组合框
本文关键字:组合 窗体 应用程序 Windows | 更新日期: 2023-09-27 18:21:52
我需要一个从ComboBox派生的类,它只接受某些特定类型的对象。所以,我需要一个通用的组合框。如果我这样声明一个新类:
public class GComboBox <Type> : ComboBox
{
// Some code
}
那么GComboBox
将不会出现在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事件。这篇文章建议你听组合框消息,但大多数帖子都告诉你,无论如何,你都可以控制添加项目。。