【问题标题】:Avoid calling indexchanged event when filling datasoruce填充数据源时避免调用索引更改事件
【发布时间】:2011-12-28 21:35:05
【问题描述】:

我正在用 c# winform 应用程序中的数据源属性填充组合框。另一方面,我正在使用相同组合的 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
}

谢谢

【问题讨论】:

  • 使用简单的布尔开关。在设置数据源之前将其设置为true,之后设置为false。如果开关的值为true,则在事件处理程序中不做任何事情
  • 我已经想到了,但我只是想知道是否有一种“花哨”的方法

标签: c# winforms combobox


【解决方案1】:

也许退订然后再订阅:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 事实是我的组合被填充在另一个组合的comboboxselectedindexchagned中,因此可以在运行时多次填充。
    • 所以在另一个组合框中选择的索引发生了变化,从这个组合框中分离处理程序,设置数据源,然后重新附加处理程序。
    • @dumdum 如何分离处理程序?我使用设计器附加了事件。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      private void combo_cliente_SelectedIndexChanged(object sender, EventArgs e) { if!(comboBox1.SelectedValue.ToString()== string.Empty) { //Here is the action to be triggered when user perfoms a selection } }

      【讨论】:

        猜你喜欢
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 2020-12-04
        相关资源
        最近更新 更多