所以,基本上我正在使用ComboBox.SelectedIndexChanged
事件来填充另外5个ComboBox
,每个事件都有自己的SelectedIndexChanged
事件。
问题在于,当第一个SelectedIndexChanged
事件触发以填充其余事件时......它还会触发其他ComboBox
es'SelectedIndexChanged
事件。
为了防止这种情况发生,我找到了一个使用SelectionChangeCommited
余下ComboBox
事件的解决方案。
但是现在,该事件(与SelectedIndexChanged
不同)在第一次单击ComboBox
的项目时不会触发...您需要先选择该项目两到三次才能执行此操作
所以,我的问题是:有没有办法解决这些问题?
答案 0 :(得分:1)
在代码中,在“填充”辅助组合框之前,取消订阅其SelectedIndexChanged事件,然后在“填充”代码运行时重新订阅
答案 1 :(得分:0)
我会创建局部变量并将其设置为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 :(得分:0)
使用标志,例如
如果你只有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;
}
}
就像那样,取决于你使用的组合框的数量。