如何防止组合框在填充时触发另一个组合框的 SelectedIndexChanged 事件
本文关键字:组合 另一个 SelectedIndexChanged 事件 何防止 填充 | 更新日期: 2023-09-27 18:37:27
所以,基本上我正在使用一个ComboBox.SelectedIndexChanged
事件来填充另外 5 个ComboBox
,每个事件都有自己的 SelectedIndexChanged
事件。
问题在于,当第一个SelectedIndexChanged
事件触发以填充其余事件时,它也会触发另一个ComboBox
es的SelectedIndexChanged
事件。
为了防止这种情况,我找到了使用事件SelectionChangeCommited
在其余ComboBox
es上的解决方案。
但是现在,该事件(与SelectedIndexChanged
不同)不会在第一次单击ComboBox
的项目时触发......您需要选择该项目两到三次才能选择。
所以,我的问题是:有没有办法解决这些问题?
在代码中,在"填充"辅助组合框之前,请取消订阅其 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;
}
}
就像这样,具体取决于您使用的组合框数量。