如何防止 ComboBox 在填充时触发另一个 ComboBox 的 SelectedIndexChanged 事件
How to prevent a ComboBox from firing another ComboBox's SelectedIndexChanged event when filling it
所以,基本上我使用 ComboBox.SelectedIndexChanged
事件来填充另外 5 个 ComboBox
s,每个都有自己的 SelectedIndexChanged
事件。
问题是当第一个 SelectedIndexChanged
事件触发以填充其余事件时..它还会触发另一个 ComboBox
es' SelectedIndexChanged
事件。
为了防止这种情况发生,我找到了在 ComboBox
es 的其余部分使用事件 SelectionChangeCommited
的解决方案。
但是现在,该事件(与 SelectedIndexChanged
不同)不会在第一次单击 ComboBox
的项目时触发...您需要 select 第二个项目或之前的三倍。
所以,我的问题是:有什么办法可以解决这些问题吗?
在代码中,在 'fill' 辅助组合框之前,取消订阅它们的 SelectedIndexChanged 事件,然后在 'fill' 代码具有 运行
时重新订阅
我会制作局部变量并将其设置为 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;
}
}
就像那样,具体取决于您使用的组合框的数量。
所以,基本上我使用 ComboBox.SelectedIndexChanged
事件来填充另外 5 个 ComboBox
s,每个都有自己的 SelectedIndexChanged
事件。
问题是当第一个 SelectedIndexChanged
事件触发以填充其余事件时..它还会触发另一个 ComboBox
es' SelectedIndexChanged
事件。
为了防止这种情况发生,我找到了在 ComboBox
es 的其余部分使用事件 SelectionChangeCommited
的解决方案。
但是现在,该事件(与 SelectedIndexChanged
不同)不会在第一次单击 ComboBox
的项目时触发...您需要 select 第二个项目或之前的三倍。
所以,我的问题是:有什么办法可以解决这些问题吗?
在代码中,在 'fill' 辅助组合框之前,取消订阅它们的 SelectedIndexChanged 事件,然后在 'fill' 代码具有 运行
时重新订阅我会制作局部变量并将其设置为 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;
}
}
就像那样,具体取决于您使用的组合框的数量。