C# Windows窗体应用程序中的通用组合框
我需要一个从ComboBox派生的类,它只接受某些特定类型的对象。所以,我需要一个通用的组合框。如果我像这样声明一个新类:C# Windows窗体应用程序中的通用组合框,c#,.net,winforms,generics,combobox,C#,.net,Winforms,Generics,Combobox,我需要一个从ComboBox派生的类,它只接受某些特定类型的对象。所以,我需要一个通用的组合框。如果我像这样声明一个新类: public class GComboBox <Type> : ComboBox { // Some code } 那么GComboBox将不会出现在Windows窗体的工具箱中。如何将其显示在工具箱中,以便将其放置在工具箱中,就像放置任何其他派生的非通用组合框一样?使用此GComboBox的最简单方法是: 使用典型的ComboBox而不是GComboBox
public class GComboBox <Type> : ComboBox
{
// Some code
}
那么GComboBox将不会出现在Windows窗体的工具箱中。如何将其显示在工具箱中,以便将其放置在工具箱中,就像放置任何其他派生的非通用组合框一样?使用此GComboBox的最简单方法是: 使用典型的ComboBox而不是GComboBox,然后转到Form1.Designer.cs并用ComboBox替换GComboBox。 如果要从工具箱显式拖动,必须从VisualStudio new projet创建类库并将其添加到工具箱中
您可以使用带有属性的常规子类,而不是泛型控件:
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() + ">";
}
}
但不确定如何防止添加错误的类型。。没有ItemAdded事件。建议您收听组合框消息,但大多数帖子都会告诉您,您仍然可以控制添加项。为什么需要在工具箱中显示它进入页面的设计器并手动添加。Visual Studio中的工具箱服务不支持泛型类型。太尴尬了,无法提示程序员输入类型参数并使其可编辑。这是你必须处理的事情。对于表单类的这种私有实现细节,封装始终是最合适的选择。公开项集合,而不是组合框。
InitializeComponent();
gComboBox1.myType = typeof(Bitmap);