Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止组合框在填充时触发另一个组合框的SelectedIndexChanged事件_C#_Wpf_Combobox_Ado.net_Selectedindexchanged - Fatal编程技术网

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

C# 如何防止组合框在填充时触发另一个组合框的SelectedIndexChanged事件,c#,wpf,combobox,ado.net,selectedindexchanged,C#,Wpf,Combobox,Ado.net,Selectedindexchanged,所以,基本上我使用了一个ComboBox.SelectedIndexChanged事件来填充另外5个ComboBox,每个ComboBox都有自己的SelectedIndexChanged事件 问题在于,当第一个SelectedIndexChanged事件触发以填充其余事件时。。它还触发其他组合框的SelectedIndexChanged事件 为了防止出现这种情况,我找到了一个解决方案,它使用了在其余组合框上提交的事件SelectionChange 但是现在,与SelectedIndexChan

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

问题在于,当第一个SelectedIndexChanged事件触发以填充其余事件时。。它还触发其他组合框的SelectedIndexChanged事件

为了防止出现这种情况,我找到了一个解决方案,它使用了在其余组合框上提交的事件SelectionChange

但是现在,与SelectedIndexChanged不同的事件不会在第一次单击组合框的项目时触发。。。您需要先选择该项两次或三次,然后再进行选择


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

在代码中,在“填充”辅助组合框之前,先取消订阅SelectedIndexChanged事件,然后在“填充”代码运行后重新订阅。我将生成局部变量,并将其设置为应忽略SelectedIndexChanged的时间

protected bool ignoreSelectedIndexChanged = false;

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (ignoreSelectedIndexChanged) { return; }

    //rest of code
}
在我看来,这比摆弄事件更明确

在主组合框中,使用如下内容:

private void comboBoxMain_SelectedIndexChanged(object sender, EventArgs e)
{            
    try
    {
        ignoreSelectedIndexChanged = true;

        //comboBox1.SelectedIndex = 1;
        //comboBox2.SelectedIndex = 2;
        //comboBox3.SelectedIndex = 3;
        //...

    }
    finally
    {
        ignoreSelectedIndexChanged = false;
    }
}
SelectionChangedCommitted可能是另一种方法。但它仅在用户进行选择时触发,这在某些情况下可能会受到限制。还有一些圆屋顶的虫子在它应该开火的时候没有开火。我个人避免使用它。

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


这取决于您使用的组合框的数量。

如果在启动父选择更改时,子组合框SelectedIndex属性更改为-1,则您可以解析出何时采取行动。我认为当未选择任何内容时,SelectedIndex将变为-1。因此,请忽略'Selectedindex=-1',谢谢你的回答,我确实觉得很有趣,你能给我举个例子吗?谢谢你的回答,在这种情况下,我应该忘记SelectionChangedCommitted事件,还是SelectedIndexChanged事件会起作用?@watchDogMan我添加了更多的解释,如果有帮助的话。它工作得很好,再次感谢,简单的解决方案,从来没有想到过
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;
    }        
}