我有一个用对象填充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.Items
和List.Items
中的对象具有相同的字段,但程序的不同之处。
我希望你理解我的问题 - 我怎样才能使这个工作?
修改
澄清;我希望容器可以编辑。因此,用户从List中选择一个Container,并且只在ListBox中选择了此容器中的Items。
不在容器中的那些仍然在ListBox中,只是没有被选中
因此,用户可以编辑容器的项目!
答案 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)
假设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;