替换Dictionary <int,tuple <list <string =“”>,List <string>&gt;&gt;中的字符串在ListView AfterLabelEdit事件</string> </int,>

时间:2014-10-17 03:23:12

标签: c# string list tuples

感谢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的图片。可能有助于人们了解这是什么。 :-) enter image description here

0 个答案:

没有答案