有一种替代的方法。由于c#中的事件都是使用委托实现的,所以,本质上说即使不知道c#是否提供了这样的功能,我们也可以用最原始的代码模拟这样的功能。我创建的一个Combox,把它命名为selectFontSize,功能是选择字体的大小。在Combox中输入了字体的大小为6—14。当我按F5键之后,系统自动的为我生成了如下的代码。这些代码在Code Editor对话框中“#region Windows Form Designer generated code”可以找到。this.selectFontSize.Items.AddRange(new object[] {
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14"});
this.selectFontSize.Location = new System.Drawing.Point(120, 48);
this.selectFontSize.Name = "selectFontSize";
this.selectFontSize.Size = new System.Drawing.Size(216, 20);
this.selectFontSize.TabIndex = 3;
****this.selectFontSize.SelectedIndexChanged += new System.EventHandler  (this.selectFontSize_SelectedIndexChanged);******这里面最关键的一条语句就是委托(*号扩起来)。它实现了调用更改下拉列表变化功能的函数。我的想法是,由于该委托使用了+=形式,所以这必定是一个多点委托。因此,按照多点委托“依次”调用委托列表中函数的操作方法,我们可以写一个自定义的委托函数,放在委托列表中。让系统调用完毕更改下拉列表的函数,就自动调用自定义函数,那么此时下拉列表肯定是被收回了。这只是我的想法,我会具体操作一下。不成熟,仅供参考。

解决方案 »

  1.   

    在SelectedIndexChanged中处理不行吗?
      

  2.   

    是呀,在下拉列表收回时无论怎样都会触发SelectedIndexChanged事件。
      

  3.   

    SelectionChangeCommitted如果用SelectedIndexChanged 在选中值不改变时不触发事件
      

  4.   

    SelectionChangeCommitted 好像也不行,如果你点开下拉列表,没有做选择就收回,SelectionChangeCommitted 也处理不了的~
      

  5.   

    To : 如果用SelectedIndexChanged 在选中值不改变时不触发事件
    测试过,不存在这个问题