【问题标题】:Generic ComboBox in Windows Forms ApplicationWindows 窗体应用程序中的通用组合框
【发布时间】:2014-09-14 11:12:35
【问题描述】:

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

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

那么GComboBox将不会出现在Windows Form的工具箱中。如何让它出现在工具箱中,以便我可以把它放在那里,就像我可以放任何其他派生的非泛型 ComboBox 一样?

【问题讨论】:

  • 为什么需要它显示在工具箱中进入页面设计器并手动添加。
  • Visual Studio 中的工具箱服务不支持泛型类型。提示程序员输入类型参数并使其可编辑太尴尬了。这是你必须处理的事情。 封装 对于 Form 类的这种私有实现细节总是最合适的选择。公开项目集合,而不是组合框。

标签: c# .net winforms generics combobox


【解决方案1】:

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

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

如果您想从工具箱中显式拖动,您必须创建一个 类库(来自 Visual Studio 新项目)并将其添加到您的工具箱中 Adding Custom Controls dll to Visual Studio ToolBox

【讨论】:

    【解决方案2】:

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

        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,您应该在放置它后对其进行调整,例如在表单构造函数中..

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多