Выбор элементов в ListBox - PullRequest
       27

Выбор элементов в ListBox

1 голос
/ 08 сентября 2010

У меня есть метод, который заполняет ListBox объектами (пользовательский класс)

internal void UpdateList() {
 foreach (Item item in Container.Items)
  List.Items.Add(item);
}

Container также является пользовательским классом, который содержит List<Item>, где хранятся все объекты этого контейнера.

Теперь пользователь может выбрать (используя ComboBox) отображение определенного Container, и я хочу выбрать все Item s, которые хранит этот контейнер.

Я попробовал это

private void ContainerList_SelectedIndexChanged(Object sender, EventArgs e) {
 Container container = (Container)ContainerList.SelectedItem;

 foreach (Item item in container.Items)
  List.SelectedIndecies.Add(List.Items.IndexOf(item));
}

Но это не сработало: ничего не выбрано. Я чувствую, что проблема в том, что, хотя объекты в Container.Items и List.Items имеют одинаковые поля, они не одинаковы для программы.

Надеюсь, вы понимаете мою проблему - как мне заставить это работать?

Редактировать

уточнить; Я хочу, чтобы контейнеры были редактируемыми. Таким образом, пользователь выбирает Контейнер из списка, и только элементы, которые находятся в этом контейнере, выбираются в ListBox.

Те, кого нет в контейнере, все еще должны быть в ListBox, просто не выбраны

Итак, пользователь может редактировать элементы контейнера!

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Предполагая, что List является ListBox, вы можете использовать функцию AddRange:

internal void UpdateList()
{
   List.Items.AddRange(Container.Items);
}

Тогда, если ContainerList является ComboBox, вы можете сделать это:

private void ContainerList_SelectedIndexChanged(Object sender, EventArgs e) 
{
   Container container = (Container)ContainerList.SelectedItem;

   for(int i = 0; i < List.Items.Count; i++)
   {
      List.Items[i].Selected = container.Items.Contains(List.Items[i]);
   }
}

Вам также нужно убедиться, что List, ListBox настроен с включенным множественным выбором:

// Set the selection mode to multiple and extended.
List.SelectionMode = SelectionMode.MultiExtended;
1 голос
/ 08 сентября 2010

1) вы можете добавлять элементы в список ПОСЛЕ выбора контейнера. поэтому в списке у вас будут предметы только из одного контейнера.

internal void UpdateList() {
List.Items.Clear(); // delete previos items
 foreach (Item item in Container.Items) // selected container
  List.Items.Add(item);
}

2) у вас может быть идентификатор для каждого контейнера, поэтому при добавлении элемента в список вы можете установить данные элемента с этим идентификатором. В событии SelectedIndexChanged просмотрите все элементы и выберите только те, которые имеют идентификатор выбранного контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...