как отменить выбор других списков, когда выбран 1 - PullRequest
1 голос
/ 24 августа 2011

У меня есть 3 списка, и я хочу отменить выбор других, когда выбран 1 из них.Как я могу это сделать?Я попытался установить для целевого свойства значение false, но c # не позволяет назначать этому целевому свойству.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Если у вас есть три списка, выполните следующие действия. Этот код очистит выбор любого другого списка, когда конкретный список изменит выбор. Вы можете очистить выбор списка, установив его 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, которое в противном случае заставило бы все поля списка очищаться при каждом выборе одного из них.

EDIT:

В качестве альтернативы, если в форме есть только три списка, вы можете объединить их в один метод. Свяжите все три списка с этим методом события:

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;
        }
    }
}
0 голосов
/ 22 июля 2018

Используя ответ @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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...