C# Comobox事件SelectedValueChanged

C# Comobox事件SelectedValueChanged,c#,winforms,combobox,C#,Winforms,Combobox,我有一个简单的问题,可能有人在我之前问过,但我找不到它。假设我有一个datatable,其中包含一些来自数据库的数据,我想将它绑定到一个组合框,我使用的是标准代码,如下所示 comboBox1.BeginUpdate( ); comboBox1.ValueMember = "id"; comboBox1.DisplayMember = "name"; comboBox1.DataSource = dt; comboBox1.EndUpdate( ); comboBox1.Selec

我有一个简单的问题,可能有人在我之前问过,但我找不到它。假设我有一个datatable,其中包含一些来自数据库的数据,我想将它绑定到一个组合框,我使用的是标准代码,如下所示

 comboBox1.BeginUpdate( );
 comboBox1.ValueMember = "id";
 comboBox1.DisplayMember = "name";
 comboBox1.DataSource = dt;
 comboBox1.EndUpdate( );
 comboBox1.SelectedIndexChanged -= new System.EventHandler( this.comboBox1_SelectedValueChanged );
问题是在绑定过程中触发了事件
SelectedValueChanged
。问题是当outher值更改时,会多次重新绑定组合,每次我都必须执行类似操作

 comboBox1.BeginUpdate( );
 comboBox1.ValueMember = "id";
 comboBox1.DisplayMember = "name";
 comboBox1.DataSource = dt;
 comboBox1.EndUpdate( );
 comboBox1.SelectedIndexChanged -= new System.EventHandler( this.comboBox1_SelectedValueChanged );
我的问题是,当我来自数据绑定而不是用户输入时,有一种更聪明的方法来跳过事件。问题是,我想在继承combobox的控件中全局地执行此操作,而不是每次都从中执行此操作
致以最良好的祝愿,
我和我一直按照太空饼干说的去做。我创建了一个名为_isLoading的全局布尔变量,并在加载combobox时将其设置为true,然后在加载完成后返回false。然后在事件处理程序中,第一行是

if(_isLoading) return;

尝试使用SelectionChangeCommitted事件

来自MSDN文档:

SelectionChangeCommitted仅当用户更改 组合框选择。不要使用SelectedIndexChanged选择ValueChanged以捕获用户更改,因为这些事件是 当选择以编程方式更改时也会引发


您可以用另一种方式思考:您可以使一个全局变量将其设置为false,在这种情况下,检查它,并在完成所有绑定后将其设置为true