如何防止组合框在填充时触发另一个组合框的 SelectedIndexChanged 事件

本文关键字:组合 另一个 SelectedIndexChanged 事件 何防止 填充 | 更新日期: 2023-09-27 18:37:27

所以,基本上我正在使用一个ComboBox.SelectedIndexChanged事件来填充另外 5 个ComboBox,每个事件都有自己的 SelectedIndexChanged 事件。

问题在于,当第一个SelectedIndexChanged事件触发以填充其余事件时,它也会触发另一个ComboBox es的SelectedIndexChanged事件。

为了防止这种情况,我找到了使用事件SelectionChangeCommited在其余ComboBox es上的解决方案。

但是现在,该事件(与SelectedIndexChanged不同)不会在第一次单击ComboBox的项目时触发......您需要选择该项目两到三次才能选择。

所以,我的问题是:有没有办法解决这些问题?

如何防止组合框在填充时触发另一个组合框的 SelectedIndexChanged 事件

在代码中,在"填充"辅助组合框之前,请取消订阅其 SelectedIndexChanged 事件,然后在"填充"代码运行时重新订阅

我会制作局部变量并将其设置为应忽略SelectedIndexChanged的时间

protected bool ignoreSelectedIndexChanged = false;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (ignoreSelectedIndexChanged) { return; }
    //rest of code
}

在我看来,这比摆弄事件更明确。

在主ComboBox中使用以下内容:

private void comboBoxMain_SelectedIndexChanged(object sender, EventArgs e)
{            
    try
    {
        ignoreSelectedIndexChanged = true;
        //comboBox1.SelectedIndex = 1;
        //comboBox2.SelectedIndex = 2;
        //comboBox3.SelectedIndex = 3;
        //...
    }
    finally
    {
        ignoreSelectedIndexChanged = false;
    }
}

SelectionChangedCommited可能是另一种方法。但只有在用户进行选择时才会触发它,这在某些情况下可能会受到限制。并且有在应该开火的时候不开火的圆顶虫子。我个人避免它。

例如
,使用标志如果您只有 2 个组合框

int flag =0;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    switch(flag)
    {
       case 0:
           flag = 1;
       break;
       case 1:
           // your code here
           // after it you should set flag = 0
       break;
       default:
       break;
    }
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    switch(flag)
    {
       case 0:
           flag = 2;
       break;
       case 2:
           // your code here
           // after it you should set flag = 0
       break;
       default:
       break;
    }        
}

就像这样,具体取决于您使用的组合框数量。