我有3个listBox,我想在选择其中一个时取消选择其他人。我怎样才能做到这一点? 我已经尝试将focused属性设置为false,但c#不允许分配到focus属性。
答案 0 :(得分:2)
假设您有三个列表框,请执行以下操作。当特定列表框更改选择时,此代码将清除所有其他列表框的选择。您可以通过设置SelectedIndex = -1
。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
listBox2.SelectedIndex = -1;
listBox3.SelectedIndex = -1;
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox2.SelectedIndex > -1)
{
listBox1.SelectedIndex = -1;
listBox3.SelectedIndex = -1;
}
}
private void listBox3_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox3.SelectedIndex > -1)
{
listBox1.SelectedIndex = -1;
listBox2.SelectedIndex = -1;
}
}
if (listBox#.SelectedIndex > -1)
是必要的,因为通过代码设置列表框的SelectedIndex
也会触发其SelectedIndexChanged
事件,否则会导致所有列表框中的任何一个清除被选中了。
修改强>
或者,如果表单上只有这三个列表框,则可以将其合并为一个方法。将所有三个列表框链接到此事件方法:
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox thisListBox = sender as ListBox;
if (thisListBox == null || thisListBox.SelectedIndex == 0)
{
return;
}
foreach (ListBox loopListBox in this.Controls)
{
if (thisListBox != loopListBox)
{
loopListBox.SelectedIndex = -1;
}
}
}
答案 1 :(得分:0)
使用@Devin Burke的答案,因此您不必担心具有以下形式的其他控件:
using System.Linq;
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox thisListBox = sender as ListBox;
if (thisListBox == null || thisListBox.SelectedIndex == 0)
{
return;
}
foreach (ListBox loopListBox in this.Controls.OfType<ListBox>().ToList())
{
if (thisListBox != loopListBox)
{
loopListBox.SelectedIndex = -1;
}
}
}