如果我有一个TreeView(myTreeview),我怎样才能获得作为父节点的所有节点的列表?即有孩子的节点
myTreeview.Nodes将为您提供MS定义的根节点列表,它基本上是指树的根分支上的节点.
此代码将构建一个包含子节点的根节点列表:
IListnodesWithChildren = new List (); foreach( TreeNode node in myTreeview.Nodes ) if( node.Nodes.Count > 0 ) nodesWithChildren.Add( node );
更新:如果您希望TreeView中的所有节点都有一个孩子而不管树有多深,那么使用一些递归,例如
private static IListBuildParentNodeList(TreeView treeView) { IList nodesWithChildren = new List (); foreach( TreeNode node in treeView.Nodes ) AddParentNodes(nodesWithChildren, node); return nodesWithChildren; } private static void AddParentNodes(IList nodesWithChildren, TreeNode parentNode) { if (parentNode.Nodes.Count > 0) { nodesWithChildren.Add( parentNode ); foreach( TreeNode node in parentNode.Nodes ) AddParentNodes( nodesWithChildren, node ); } }
更新2:只有一个foreach循环的递归方法:
private static IListBuildParentNodeList(TreeView treeView) { IList nodesWithChildren = new List (); AddParentNodes( nodesWithChildren, treeView.Nodes ); return nodesWithChildren; } private static void AddParentNodes(IList nodesWithChildren, TreeNodeCollection parentNodes ) { foreach (TreeNode node in parentNodes) { if (node.Nodes.Count > 0) { nodesWithChildren.Add( node ); AddParentNodes(nodesWithChildren, node.Nodes); } } }