TK.*_*TK. 2 c# treeview parent-node winforms
如果我有一个TreeView(myTreeview),我怎样才能获得作为父节点的所有节点的列表?即有孩子的节点
myTreeview.Nodes将为您提供MS定义的根节点列表,它基本上是指树的根分支上的节点.
此代码将构建一个包含子节点的根节点列表:
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
foreach( TreeNode node in myTreeview.Nodes )
if( node.Nodes.Count > 0 ) nodesWithChildren.Add( node );
Run Code Online (Sandbox Code Playgroud)
更新:如果您希望TreeView中的所有节点都有一个孩子而不管树有多深,那么使用一些递归,例如
private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
{
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
foreach( TreeNode node in treeView.Nodes )
AddParentNodes(nodesWithChildren, node);
return nodesWithChildren;
}
private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNode parentNode)
{
if (parentNode.Nodes.Count > 0)
{
nodesWithChildren.Add( parentNode );
foreach( TreeNode node in parentNode.Nodes )
AddParentNodes( nodesWithChildren, node );
}
}
Run Code Online (Sandbox Code Playgroud)
更新2:只有一个foreach循环的递归方法:
private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
{
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
AddParentNodes( nodesWithChildren, treeView.Nodes );
return nodesWithChildren;
}
private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNodeCollection parentNodes )
{
foreach (TreeNode node in parentNodes)
{
if (node.Nodes.Count > 0)
{
nodesWithChildren.Add( node );
AddParentNodes(nodesWithChildren, node.Nodes);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10852 次 |
| 最近记录: |