布局事件难题

时间:2016-12-07 08:02:30

标签: winforms combobox

此代码适用于其他事件,但不适用于comboBox1_Layout

   Console.WriteLine(comboBox1.Name + " has "+ comboBox1.Items.Count + " items. ");

   if (comboBox1.Items.Count <= 0)
   {
      var xx = Enum.GetValues(typeof(PictureBoxSizeMode))
                         .Cast<PictureBoxSizeMode>().Select(x => x.ToString()).ToArray();

      //xx = new[] { "111", "222", "333" };

      Console.Write("Adding " + xx.Length + " items..");
      comboBox1.Items.Clear();
      comboBox1.Items.AddRange(xx);
      Console.WriteLine(" now we have  "  + comboBox1.Items.Count + " items.");
   }

输出

  

comboBox1有0个项目   添加5项..现在我们有5项。
  comboBox1有5个项目。

您可以看到Layout事件已执行两次,但AddRange仅执行一次。

ComboBox现在实际上包含 10 项目:

enter image description here

当然我测试了枚举,这是正确的,当然Clear只是一个绝望的尝试解决这个问题,但无济于事。

注意:我知道滥用Layout进行初始化是不正确的,对于一个严肃的项目我会创建初始化服务。但是对于快速和脏的测试,它是一种将GUI事件保持在一起的方法,缺少一个构造函数或Load事件。这个难题该怎么办呢,但效果如何发生

在任何时候测试项目计数时,它正确地报告只有5个项目,当选择其中一个时,程序崩溃。所以它似乎是一个视觉故障,这个词在这里意味着'bug'..

另一方面,将ComboBox设置为OwerDrawing时,comboBox1_DrawItem事件会被调用10次,在删除列表时报告索引0-9。并且,正如预期的那样,当DrawItem代码尝试访问Items时,它会因IndexOutOfRange异常而崩溃。

0 个答案:

没有答案