感谢Peter Duniho关于Stack Overflow问题看起来如何的提示,我将原来的问题及其标题转换为更适合的问题。
所以我正在为聊天机器人创建一个会话编辑器,其中包含一个树视图和两个列表视图。我将每个treenode存储为字典中的键(int)。字典结构如下所示:
Dictionary<selectedNode(int), Tuple<List<listView1ItemLabels(string)>, List<listView2ItemLabels(string)>>>
元组中的每个列表都包含项目的标签,这些项目在运行时使用此自定义函数动态添加到两个列表视图中:
void AddItemToListView1(string itemName)
{
// add new Item to listView1 and
dictionary[selectedNodeID].Item1.Add(itemName);
// add its Text to the dictionary Tuple first generic list
listView1.Items.Add(itemName);
}
当我点击一个节点(或者更确切地说是“相应的字典键”)时,两个列表视图将通过treeView的AfterSelect事件从元组中的列表重新填充,如下所示:
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
foreach(string str in dictionary[selectedNodeID].Item1)
{
listView1.Items.Add(str);
}
foreach(string str in dictionary[selectedNodeID].Item2)
{
listView2.Items.Add(str);
}
}
我想要实现的是根据AfterLabelEdit事件中listview项发生的更改来更改元组列表中的字符串。我的方法显然不正确,即使这些方法有效:
private void listView1_BeforeLabelEdit(object sender, LabelEditEventArgs e)
{
// Capture the yet unedited label of the item
oldLabel = e.Label;
}
private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
if(e.Label == null)
return;
if(e.Label == "")
e.CancelEdit = true;
// remove the selected listview item label, which was previously added using the custom AddItem() function
dictionary[selectedNodeID].Item1.Add(e.Label);
dictionary[selectedNodeID].Item1.Remove(oldLabel);
}
我真的没有看到为什么这不起作用的任何理由。我错过了什么?
编辑:这是GUI的图片。可能有助于人们了解这是什么。 :-)