【问题标题】:Enum comboBox lists every item twiceEnum comboBox 将每个项目列出两次
【发布时间】:2018-01-30 01:03:12
【问题描述】:

我在 WinForms 中有一个自定义 ComboBox,它应该显示一个枚举。基本上,我从 ComboBox 派生,在构造函数中,我从枚举中加载项目。

问题在于,即使在进程结束时它说项目数与枚举项目数相同,视觉表示显示就好像相同项目被添加了两次。换句话说,如果我的枚举有 Value1 和 Value2 的值,ComboBox 会说它有两个值,但是在下拉时它会显示 Value1、Value2、Value1、Value2,就好像我已经添加了两次一样。

public class EnumComboBox : ComboBox
{
   public EnumComboBox() : base()
   {
      foreach (MyEnum p in Enum.GetValues(typeof(MyEnum)) {
          base.Items.Add(p);
      }
      SelectedIndex = 0;
   }

}

正如您在代码中看到的,在构造函数中,项目被添加一次,但它们被列出两次。我在这里做错了什么?

【问题讨论】:

  • base.Items.Add(p); 行添加断点并调试您的代码以查看每个项目添加了多少次。例如。如果您的代码暂停了 3 次,并且您有 3 个项目要添加,那么每个项目都添加了一次。
  • 我确实放了一个 Console.WriteLine,它显示了每个添加一次的项目。最后,我还输出了 Items.Count,它的数量是正确的(2 而不是 4)。
  • 在运行程序之前,表单设计器中的 ComboBox' 项目列表是否为空?

标签: winforms enums combobox


【解决方案1】:

与其在构造函​​数中,让它正常运行的方法是将构造函数留空并将插入代码移动到 OnCreate 方法:

protected override void OnCreateControl()
{
    if (!DesignMode) {
        foreach (MyEnum p in Enum.GetValues(typeof(MyEnum))) {
            Items.Add(p);
        }
        SelectedIndex = 0;
    }
}

【讨论】:

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