C# 在填充datasoruce时避免调用indexchanged事件

C# 在填充datasoruce时避免调用indexchanged事件,c#,winforms,combobox,C#,Winforms,Combobox,我在一个c#winform应用程序中用datasource属性填充一个组合框。另一方面,我使用同一组合的SelectedIndexChanged启动一个操作。问题是,每当组合中填充数据源时,都会调用SelectedIndexChanged,我只希望在用户实际进行选择时调用此事件。 填充组合时是否有避免调用此事件的方法 这是我的一些代码 //Filling the combo with some data combo_cliente.DataSource = clientes; combo_cli

我在一个c#winform应用程序中用datasource属性填充一个组合框。另一方面,我使用同一组合的SelectedIndexChanged启动一个操作。问题是,每当组合中填充数据源时,都会调用SelectedIndexChanged,我只希望在用户实际进行选择时调用此事件。 填充组合时是否有避免调用此事件的方法

这是我的一些代码

//Filling the combo with some data
combo_cliente.DataSource = clientes;
combo_cliente.DisplayMember = "NomComp";
combo_cliente.ValueMember = "IDPersona";

private void combo_cliente_SelectedIndexChanged(object sender, EventArgs e)
{
    // Here is the action to be triggered when user perfoms a selection
}

谢谢

我假设您为事件处理程序分配了设计器,以便在实例化控件时绑定它们。或者,您可以在填充控件后在代码中分配它们

将事件处理程序附加到代码中,而不是在aspx页面上执行,并在完成控件加载后执行

您需要添加一条空白记录作为组合框的第一条。然后在你的代码中,你可以写这个

private void combo\u cliente\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果!(comboBox1.SelectedValue.ToString()==string.Empty)
{
//以下是用户执行选择时要触发的操作
}

}

可能先取消订阅,然后再重新订阅:

combo_cliente.SelectedIndexChanged -= combo_cliente_SelectedIndexChanged;
combo_cliente.DataSource = clientes;
combo_cliente.SelectedIndexChanged += combo_cliente_SelectedIndexChanged;

使用一个简单的布尔开关。在设置数据源之前,将其设置为
true
,然后设置为
false
。在事件处理程序中,如果开关的值为
true
,则不执行任何操作。我已经想到了这一点,但我只是想知道是否有一种“奇特”的方法来执行此操作。事实上,我的组合填充在另一个组合的comboboxselectedindexchagned中,因此,在运行时可以多次填充。因此,在另一个组合框中,选定的索引已更改,请从此组合框中分离处理程序,设置数据源,然后重新连接处理程序。@dumdum如何分离处理程序?我使用设计器附加了事件。