选择1时如何取消选择其他列表框

时间:2011-08-24 15:25:41

标签: c# winforms listbox

我有3个listBox,我想在选择其中一个时取消选择其他人。我怎样才能做到这一点? 我已经尝试将focused属性设置为false,但c#不允许分配到focus属性。

2 个答案:

答案 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;
        }
    }
}