如何构建具有自定义结构的TreeView节点? [关闭]

问题描述 投票:-1回答:1

我正在尝试在Winform(使用c#)中构建具有类似附件图像的类似结构的Treeview。假设我拥有最低的节点信息及其所有父节点信息。例如:我知道最低的子节点名称是:“ a”,它的父节点是:“ b”,然后盛大节点是“ c”,以此类推。我将拥有所有最低的子节点及其所有父节点信息,因此需要在正确的组中创建它们并对其进行分组。所以我只是想知道怎么做?

谢谢:)。

enter image description here

c# winforms
1个回答
1
投票

例如,您可以尝试使用Tag使实例与其节点保持对应关系

using System.Linq;

...

private static TreeNode AddNodes<T>(TreeView tree, IEnumerable<T> items) {
  if (null == tree)
    throw new ArgumentNullException(nameof(tree));
  else if (null == items)
    throw new ArgumentNullException(nameof(items));

  bool found = true;
  TreeNodeCollection nodes = tree.Nodes;
  TreeNode node = null; 

  foreach (var item in items.Reverse()) {
    if (found) {
      node = nodes.OfType<TreeNode>().FirstOrDefault(nd => object.Equals(nd.Tag, item));

      found = node != null;
    }

    if (!found) {
      node = new TreeNode(item?.ToString());
      node.Tag = item;
      nodes.Add(node);
    }

    nodes = node.Nodes;
  }

  return node;
}

用法:

myTreeView.BeginUpdate();

try { 
  // Items from child to parent
  AddNodes(myTreeView, new string[] { "leaf", "parent", "root"});
  AddNodes(myTreeView, new string[] { "child", "parent", "root" });
  AddNodes(myTreeView, new string[] { "child", "branch", "root" });
}
finally {
  myTreeView.EndUpdate();
}

您将有

root
  parent
    leaf
    child
  branch 
    child

结构

© www.soinside.com 2019 - 2024. All rights reserved.