【问题标题】:Executing an action only when I select an item form the combo box仅当我从组合框中选择项目时才执行操作
【发布时间】:2026-01-27 12:00:02
【问题描述】:

我有一个ComboBox,在表单的加载事件中,它填充了数据。现在,当我从ComboBox 中选择一个项目时,它应该执行一些操作。所以我知道在这种情况下可以使用的事件很少,比如

SelectedIndexChanged

SelectedValueChanged

等等

但问题是即使在加载表单时设置组合框的DataSource 并选择默认索引等时也会引发这些事件。

    ComboBox1.DataSource = dt;

    ComboBox1.SelectedIndex = -1;

我想要做的是,我只想在 选择组合框中的一个项目时执行一个动作。在这种情况下是否可以使用鼠标事件?

【问题讨论】:

  • 使用SelectionChangeCommitted...仅在用户点击时触发。

标签: c# .net winforms events combobox


【解决方案1】:

我认为没有其他事件可以更好地处理您想做的事情。 XIVSolutions 为绑定数据源时触发的事件提供了一个简洁的解决方法:How to prevent selectedindexchanged event when DataSource is bound?

另外,既然SelectedIndexChanged 适用于所有情况,为什么不只处理第一个?

if (ComboBox1.SelectedIndex == -1)
  {
    return;
  }

如果 -1 对应于您希望能够选择的值,只需使用一个私有字段来存储一些 bool,您可以检查以确定它是否是第一次执行该操作。

【讨论】:

    【解决方案2】:

    comboBox.SelectionChangeCommitted 事件似乎就是这样做的。

    否则,您可以在绑定数据源之前设置一个布尔值,您可以在事件中使用它来忽略它。

    private bool blnIgnoreEvent = false;
    
    // in Form_load
    blnIgnoreEvent = true;
    ComboBox1.DataSource = dt;
    blnIgnoreEvent = false;
    
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (!blnIgnoreEvent)
        {
            // go ahead
        }
    }
    

    【讨论】: