【发布时间】:2016-03-11 18:04:17
【问题描述】:
目前我有 6 个列表框。我试图选择与手动选择的同一行中的所有其他 5 个列表框项目。
但是,我得到一个错误:
“System.StackOverflowException”类型的未处理异常 发生在 System.Windows.Forms.dll 中
无法计算表达式,因为当前线程在堆栈中 溢出状态。
下面是其中一个列表框的代码示例,对所有其他列表框重复。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
listBox1.SelectedIndexChanged=1;
listBox3.SelectedIndex = -1;
listBox2.SelectedIndex = -1;
listBox4.SelectedIndex = -1;
listBox5.SelectedIndex = -1;
listBox6.SelectedIndex = -1;
listBox2.ClearSelected();
listBox3.ClearSelected();
listBox4.ClearSelected();
listBox5.ClearSelected();
listBox6.ClearSelected();
int a = listBox1.SelectedIndex;
int b = listBox2.SelectedIndex;
int c = listBox3.SelectedIndex;
int d = listBox4.SelectedIndex;
int f = listBox5.SelectedIndex;
int g = listBox6.SelectedIndex;
if (a >-1)
{
// listBox1.SetSelected(a,true);
listBox2.SetSelected(a, true);
listBox3.SetSelected(a, true);
listBox4.SetSelected(a, true);
listBox5.SetSelected(a, true);
listBox6.SetSelected(a, true);
}
else if (b > -1)
{
listBox1.SetSelected(b, true);
// listBox2.SetSelected(b, true);
listBox3.SetSelected(b, true);
listBox4.SetSelected(b, true);
listBox5.SetSelected(b, true);
listBox6.SetSelected(b, true);
}
else if (c > -1)
{
listBox1.SetSelected(c, true);
listBox2.SetSelected(c, true);
// listBox3.SetSelected(c, true);
listBox4.SetSelected(c, true);
listBox5.SetSelected(c, true);
listBox6.SetSelected(c, true);
}
else if (d > -1)
{
listBox1.SetSelected(d, true);
listBox2.SetSelected(d, true);
listBox3.SetSelected(d, true);
// listBox4.SetSelected(d, true);
listBox5.SetSelected(d, true);
listBox6.SetSelected(d, true);
}
else if (f > -1)
{
listBox1.SetSelected(f, true);
listBox2.SetSelected(f, true);
listBox3.SetSelected(f, true);
listBox4.SetSelected(f, true);
// listBox5.SetSelected(f, true);
listBox6.SetSelected(f, true);
}
else if (g > -1)
{
listBox1.SetSelected(g, true);
listBox2.SetSelected(g, true);
listBox3.SetSelected(g, true);
listBox4.SetSelected(g, true);
listBox5.SetSelected(g, true);
// listBox6.SetSelected(g, true);
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox1.SelectedIndex = -1;
listBox3.SelectedIndex = -1;
listBox4.SelectedIndex = -1;
listBox5.SelectedIndex = -1;
listBox6.SelectedIndex = -1;
listBox1.ClearSelected();
listBox3.ClearSelected();
listBox4.ClearSelected();
listBox5.ClearSelected();
listBox6.ClearSelected();
int a = listBox1.SelectedIndex;
int b = listBox2.SelectedIndex;
int c = listBox3.SelectedIndex;
int d = listBox4.SelectedIndex;
int f = listBox5.SelectedIndex;
int g = listBox6.SelectedIndex;
if (a > -1)
{
// listBox1.SetSelected(a,true);
listBox2.SetSelected(a, true);
listBox3.SetSelected(a, true);
listBox4.SetSelected(a, true);
listBox5.SetSelected(a, true);
listBox6.SetSelected(a, true);
}
else if (b > -1)
{
listBox1.SetSelected(b, true);
// listBox2.SetSelected(b, true);
listBox3.SetSelected(b, true);
listBox4.SetSelected(b, true);
listBox5.SetSelected(b, true);
listBox6.SetSelected(b, true);
}
else if (c > -1)
{
listBox1.SetSelected(c, true);
listBox2.SetSelected(c, true);
// listBox3.SetSelected(c, true);
listBox4.SetSelected(c, true);
listBox5.SetSelected(c, true);
listBox6.SetSelected(c, true);
}
else if (d > -1)
{
listBox1.SetSelected(d, true);
listBox2.SetSelected(d, true);
listBox3.SetSelected(d, true);
// listBox4.SetSelected(d, true);
listBox5.SetSelected(d, true);
listBox6.SetSelected(d, true);
}
else if (f > -1)
{
listBox1.SetSelected(f, true);
listBox2.SetSelected(f, true);
listBox3.SetSelected(f, true);
listBox4.SetSelected(f, true);
// listBox5.SetSelected(f, true);
listBox6.SetSelected(f, true);
}
else if (g > -1)
{
listBox1.SetSelected(g, true);
listBox2.SetSelected(g, true);
listBox3.SetSelected(g, true);
listBox4.SetSelected(g, true);
listBox5.SetSelected(g, true);
// listBox6.SetSelected(g, true);
}
}
【问题讨论】:
-
永远不要使用空的 Try-Catch。
a + 1 > 0是a > -1的另一种说法吗? -
您是否只有 listBox2 触发了在 listBox2_SelectedIndexChanged 中处理的 SelectedIndexChanged 事件?
-
@LarsTech 你是对的。谢谢!
-
@skalinkin 对不起,我的英语不强,但如果我明白你的意思,答案是肯定的。请通过答案部分查看我的完整代码。谢谢