Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体应用程序中的通用组合框_C#_.net_Winforms_Generics_Combobox - Fatal编程技术网

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

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

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

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);