C # Найти выбранное состояние всех элементов в ListBox - PullRequest
0 голосов
/ 24 августа 2018

Я нашел много примеров того, как найти выбранные элементы в списке и как перебрать список;

for(int index=0;index < listBox1.Items.Count; index++)
{
    MessageBox.Show(listBox1.Items[index].ToString();
}

или

foreach (DataRowView item in listBox1.Items)
{
   MessageBox.Show(item.Row["ID"].ToString() + " | " + item.Row["bus"].ToString());
}

Хотя эти методы работают отличночто касается выбранных элементов, то мне еще предстоит выяснить или найти, как получить выбранное состояние, выбранное и невыбранное, для каждого элемента в списке, поскольку приведенное выше дает только выбранные.По сути, мне нужно что-то вроде этого;

for(int index=0;index < listBox1.Items.Count; index++)
{
    if (index.SelectedMode == SelectedMode.Selected)
    {
        MessageBox.Show(listBox1.Items[index].ToString() +"= Selected";
    }
    else
    {
        MessageBox.Show(listBox1.Items[index].ToString() +"= Unselected";
    }
}

Я нашел фрагмент, который сказал использовать (listBox1.SelectedIndex = -1), чтобы определить выбранное состояние, однако я не выяснил или не нашел, какпостроить цикл вокруг этого, чтобы проверить каждый элемент в списке.

Я также читал, что я должен поместить элементы списка в массив, но опять же ничего о получении выбранного состояния каждого элемента в списке.

Я знаю, что мне придется перебирать список, чтобы выполнить то, что мне нужно, я уверен, что это будет один из вышеперечисленных циклов, однако мне еще предстоит найти, как извлечь выбранное состояниекаждый элемент в списке.

Я использую VS2013, C # Windows Form, .NET Framework 4.0 Заранее благодарен за любые советы / указания.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Это даст вам невыбранные предметы:

List<string> unselected = listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>());

Вы можете перебрать этот список следующим образом:

foreach(string str in listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>()))
{
    System.Diagnostics.Debug.WriteLine($"{str} = Not selected");
}

Я предположил, что вы используете string в качестве типа элемента. Если вы хотите использовать что-то еще, просто замените string на ваш тип, и оно все равно должно работать.

Затем вы перебираете невыбранные элементы, чтобы делать с ними все, что хотите, а затем перебираете listBox1.SelectedItems, чтобы делать с выбранными все, что вы хотите.

0 голосов
/ 24 августа 2018

Вы можете использовать GetSelected метод ListBox. Возвращает значение, указывающее, выбран ли указанный элемент.

Например, следующий код устанавливает значение от selected до true, если выбран элемент с индексом 0 (первый элемент):

var selected = listBox1.GetSelected(0);

Пример

В следующем цикле отображается окно сообщения для каждого элемента с текстом элемента и статусом выбора элемента:

for (int i = 0; i < listBox1.Items.Count; i++)
{
    var text = listBox1.GetItemText(listBox1.Items[i]);
    var selected = listBox1.GetSelected(i);
    MessageBox.Show(string.Format("{0}:{1}", text, selected ? "Selected" : "Not Selected"));
}
...