TreeView (myTreeview) がある場合、親ノードであるすべてのノードのリストを取得するにはどうすればよいですか? つまり、子を持つノード
11152 次
2 に答える
5
myTreeview.Nodes は、基本的にツリーのルート ブランチ上のノードを意味する、MS によって定義されたルート ノードのリストを提供します。
このコードは、子を持つルート ノードのリストを作成します。
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
foreach( TreeNode node in myTreeview.Nodes )
if( node.Nodes.Count > 0 ) nodesWithChildren.Add( node );
更新:そして、ツリーの深さに関係なく、子を持つ 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 );
}
}
更新 2: foreach ループが 1 つだけの再帰メソッド:
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);
}
}
}
于 2009-02-18T11:25:03.497 に答える
1
private void AddNonLeafNodes(List<TreeNode> nonLeafNodes, TreeNodeCollection nodes)
{
foreach( TreeNode node in nodes )
{
if( node.Nodes.Count > 0 )
{
nonLeafNodes.Add(node);
AddNonLeafNodes(nonLeafNodes,node.Nodes);
}
}
}
List<TreeNode> nonLeafNodes = new List<TreeNode>();
AddNonLeafNodes(nonLeafNodes,treeView1.Nodes);
于 2009-02-18T11:44:56.990 に答える