下拉列表检查索引是否由代码或选择更改

时间:2016-04-14 11:20:48

标签: c# winforms

我在项目中有一个DropDownList。此DropDownList包含SelectedIndexChanged事件:

private void cbo_SelectedIndexChanged(object sender, EventArgs e){......}

是否可以检查代码中的索引是否已更改,例如:

cbo.SelectedIndex = placering;

,或者用户互动是否发生了变化?

2 个答案:

答案 0 :(得分:4)

由于DropDownList没有Focused ComboBox控制WinForms中的属性,因此并不容易。一种方法是添加自定义标志,并在更改SelectedIndex属性之前更改其值。在事件处理程序内部,您可以检查此标志并重置其值:

private volatile bool isAutoFired = false;

然后在代码的某处:

isAutoFired = true;
cbo.SelectedIndex = placering;


private void cbo_SelectedIndexChanged(object sender, EventArgs e)
{       
   if(!isAutoFired)
   {
      // event is fired by user 
   }

   isAutoFired = false;
}

答案 1 :(得分:1)

您可以在可编程地更改选择之前删除代码中的事件处理程序,然后将其添加回来。这是我最喜欢的方法。不需要旗帜。

cbo.SelectedIndexChanged -= cbo_SelectedIndexChanged;
cbo.SelectedIndex = 1 // or what you do to change the index
cbo.SelectedIndexCHanged += new EventHandler(cbo_SelectedIndexChanged);