选择ListBox中的项目

时间:2010-09-08 11:31:41

标签: c# combobox listbox

我有一个用对象填充ListBox的方法(自定义类)

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

Container也是一个自定义类,其中包含List<Item>,其中存储了此容器的所有对象。

现在,用户可以选择(使用ComboBox)来显示某个Container,并且我想要选择此容器存储的所有Item

我试过

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.ItemsList.Items中的对象具有相同的字段,但程序的不同之处。

我希望你理解我的问题 - 我怎样才能使这个工作?

修改

澄清;我希望容器可以编辑。因此,用户从List中选择一个Container,并且只在ListBox中选择了此容器中的Items。

不在容器中的那些仍然在ListBox中,只是没有被选中

因此,用户可以编辑容器的项目!

2 个答案:

答案 0 :(得分:1)

1)您可以在选择容器后向List添加项目。因此,在列表中,您将只有一个容器中的项目。

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

2)您可能拥有每个容器的ID,因此在将项目添加到列表时,您可以使用该ID设置项目的数据。在SelectedIndexChanged事件中,转到所有项目,并仅选择具有所选容器ID的那些项目。

答案 1 :(得分:1)

假设ListListBox,您可以使用AddRange函数:

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

然后假设ContainerListComboBox,您可以这样做:

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]);
   }
}

您还需要确保ListListBox已设置为启用了多项选择:

// Set the selection mode to multiple and extended.
List.SelectionMode = SelectionMode.MultiExtended;