组合框事件SelectedValueChanged

14

我有一个简单的问题,可能有人在我之前问过,但我找不到答案。假设我有一个DataTable从数据库中获取了一些数据,我想将它绑定到一个combobox上,我可以使用下面的标准代码:

 comboBox1.BeginUpdate( );
 comboBox1.ValueMember = "id";
 comboBox1.DisplayMember = "name";
 comboBox1.DataSource = dt;
 comboBox1.EndUpdate( );

问题出在绑定事件 SelectedValueChanged 时被触发。问题在于当其他值改变时,需要多次重新绑定组合框,每次我都必须像这样做:

 comboBox1.SelectedIndexChanged -= new System.EventHandler( this.comboBox1_SelectedValueChanged );

我的问题是:有没有更聪明的方法,可以在数据绑定而不是用户输入时跳过事件?问题是我想在我的继承自组合框的控件中以某种方式全局执行它,而不是每次在每个表单中都这样做。

最好的问候,
Iordand


1
你可以换一种思路:可以创建一个全局变量并将其设置为false,在此事件中检查它,完成所有绑定后将其设置为true。 - Amr Badawy
2个回答

18

尝试使用SelectionChangeCommitted事件。

根据MSDN文档:

SelectionChangeCommitted仅在用户更改组合框选择时引发。请勿使用SelectedIndexChangedSelectedValueChanged来捕获用户更改,因为这些事件在程序化更改选择时也会触发。


0

我一直遵循Space Cracker所说的方法。我创建了一个名为_isLoading的全局布尔变量,并在加载下拉框时将其设置为true,完成后再将其设置回false。然后在事件处理程序中,第一行是

if(_isLoading) return;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接