【问题标题】:Treenode exist but treenode.nodes.ContainsKey("Nodename") equals falseTreenode 存在但 treenode.nodes.ContainsKey("Nodename") 等于 false
【发布时间】:2018-04-07 19:28:36
【问题描述】:

这是我的代码:

if (e.Node.Parent == null)
{
    string selectedNodeText = e.Node.Text;
    TreeNode x = e.Node;
    string response = server.Send_Command(Convert.ToInt32(this.Text), @"browse," + selectedNodeText);
    string[] files = response.Split(',');
    foreach (string file in files)
    {
        if (file.Contains(".exe"))
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 1;
            n.Text = file;
            x.Nodes.Add(n);


        }
        else if (file.Contains(".txt") || file.Contains(".doc") || file.Contains(".rtf"))
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 4;
            n.Text = file;
            x.Nodes.Add(n);
        }
        else if (!file.Contains("."))
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 3;
            n.Text = file;
            x.Nodes.Add(n);
        }
        else if (file.Contains(".rar") || file.Contains(".zip"))
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 5;
            n.Text = file;
           x.Nodes.Add(n);
        }
        else if (file.Contains(".sys"))
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 6;
            n.Text = file;
            x.Nodes.Add(n);
        }
        else
        {
            TreeNode n = new TreeNode();
            n.ImageIndex = 2;
            n.Text = file;
           x.Nodes.Add(n);
        }
    }

响应是逗号分隔的字符串,包含文件名和目录。

现在,如果我将部分代码更改为:

if (file.Contains(".exe"))
{
    TreeNode n = new TreeNode();
    n.ImageIndex = 1;
    n.Text = file;
    if(treeView1.Nodes.ContainsKey(file))
    {

    }
    else
    {
        x.Nodes.Add(n);
    }
}

即使我看到该节点存在,它仍然给我错误并创建新节点。我检查变量文件,它与现有节点名称相同,但它仍然返回 false 并创建节点。

【问题讨论】:

  • ContainsKey 搜索带有给定NameTreeNode,而不是Text
  • 旁注:您也可以使用treeView1.Nodes.Find 搜索子节点。
  • 感谢您的帮助。请将其发布为 answear
  • 你应该使用 Path.GetExtension 而不是 ".Contains()`,因为 "MyFile.exe.config" 是完全合法的并且很常见。

标签: c# winforms treeview


【解决方案1】:

TreeNodeCollection.ContainsKey 方法文档中所述:

确定集合是否包含具有指定键的树节点。

备注

Name 属性对应于 TreeNodeCollectionTreeNode 的键。

换句话说,ContainsKey 搜索带有给定NameTreeNode,而不是您想象的Text

这同样适用于IndexOfKeyFind 方法。

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2013-10-19
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多