【问题标题】:Prevent repeating root nodes or child nodes of root nodes using inputted directories防止使用输入的目录重复根节点或根节点的子节点
【发布时间】:2019-03-16 03:17:13
【问题描述】:

我想知道如何防止该根节点中的根节点或子节点重复?以及子节点的任何子节点等。请记住,这些节点基于输入的目录(我不想使用 Directory.GetDirectories 或任何东西)。

例如,如果我输入这三个东西:

猫\狗\猴子

猫\狗\树

猫\狗\树\猴子

然后 TreeView 将如下所示:

cat 
  dog
    monkey
    tree
      monkey

我知道这项任务可能看起来很简单,而且据我所知它可能很简单,但出于某种原因,我觉得很难做到这一点。我还需要能够轻松地将每个输入目录的最后一个节点与一个对象相关联。因此,例如,“树”将具有与之关联的数据等。该过程应该可以多次使用,以防我以后决定在 TreeView 中输入更多目录。

谢谢!

编辑:想通了。

【问题讨论】:

  • 这些节点是如何创建的?有人手动创建它们吗?您是否只需要在添加新节点时执行此检查,以确保该值不会出现在其任何父节点中?添加节点时是否有任何节点已经有子节点,或者是没有子节点的单个节点一次添加一个?

标签: c# treeview treenode


【解决方案1】:
  1. 拆分输入

  2. 获取每个参数的计数

  3. 检查某个维度上是否已经存在节点

  4. 添加或跳过

示例代码如下所示。 (此代码可能不是优化代码)

string[] input;
int count = input.Count;
getinput(input);
TreeNode CurrentNode = new TreeNode("Root");
this.treeview1.Add(CurrentNode);
foreach(string[] inputVal in input) {
    foreach(string[] sp in inputVal.Split('\\')) { 
        CurrentNode = this.treeview.FindNode("Root");
        for(int i = 0; i<sp.Count; i++) {
            bool findSign = false;
            foreach(TreeNode TN in CurrentNode.ChildNodes) {
                //find if current node contains node named with sp[i]
                if(TN.Text == sp[i]) {
                    findSign = true;
                    CurrentNode = TN;//set Current node as found node
                    break;
                }
            }
            if(findSign == false) {
                //if node name wasn't found, add a new node on current node
                TreeNode newNode = new TreeNode(sp[i]);
                CurrentNode.Add(newNode);
                CurrentNode = newNode;//add node and set as current
            }   
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多