为了简单起见,我们假设绑定到列表框的项目是字符串。然后你可以使用字典来保存你的小组作业(你必须把它保存在某个地方):
Dictionary<string, List<string>> listOfGroups = new Dictionary<string, List<string>>();
其中 key 是组的名称,字符串列表包含组中的项目。然后,在某个地方,您创建一个组,您将为其分配值
void CreateGroup(string groupName)
{
listBox2.Items.Add(groupName);
if (!listOfGroups.ContainsKey(groupName)
listOfGroups.Add(groupName, new List<string>());
}
然后,您可以在组中管理项目并在例如 listBox2 上的选择更改时添加/删除它们:
string item = (string)listBox1.SelectedItem;
if(!listOfGroups.ContainsKey((string)listBox2.SelectedItem))
listOfGroups.Add((string)listBox2.SelectedItem,new List<string>());
((List<string>)listOfGroups[(string)listBox2.SelectedItem]).Add(item);
listBox3.Items.Add(item);
listBox1.Items.Remove(item);
最后:
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox3.Items.Clear();
if (!listOfGroups.ContainsKey((string)listBox2.SelectedItem))
listOfGroups.Add((string)listBox2.SelectedItem, new List<string>());
listBox3.Items.AddRange(listOfGroups[(string)listBox2.SelectedItem].ToArray());
List<string> list = listOfAllItems.Where(a => !listBox3.Items.Contains(a)).ToList();
listBox1.Items.Clear();
listBox1.Items.AddRange(list.ToArray());
}
不过,这只是一个想法。如果您使用的是 DataSet,也许您可以只使用 linq(而不是字典)来选择要在 listbox2 更改后显示的项目。