TreeView
コントロール内のすべてのツリーノード(すべてのレベル)のリストを取得するにはどうすればよいですか?TreeViewコントロールのすべてのツリーノードのリストを取得します。
6
A
答えて
15
ルートノードが1つのツリーがあると仮定すると、次のコードは常にツリーノードを最も深いところにループし、1つ上のレベルに戻ってゆきます。各ノードのテキストが印刷されます。クラエルールの答えに
TreeNode oMainNode = oYourTreeView.Nodes[0];
PrintNodesRecursive(oMainNode);
public void PrintNodesRecursive(TreeNode oParentNode)
{
Console.WriteLine(oParentNode.Text);
// Start recursion on all subnodes.
foreach(TreeNode oSubNode in oParentNode.Nodes)
{
PrintNodesRecursive(oSubNode);
}
}
6
更新(私の頭の上から未テスト) (これで彼/彼女のソリューションの最初の2行置き換える):念のために、
foreach (var node in oYourTreeView.Nodes)
{
PrintNodesRecursive(node);
}
6
レイジーLINQのアプローチをします
private void EnumerateAllNodes()
{
TreeView myTree = ...;
var allNodes = myTree.Nodes
.Cast<TreeNode>()
.SelectMany(GetNodeBranch);
foreach (var treeNode in allNodes)
{
// Do something
}
}
private IEnumerable<TreeNode> GetNodeBranch(TreeNode node)
{
yield return node;
foreach (TreeNode child in node.Nodes)
foreach (var childChild in GetNodeBranch(child))
yield return childChild;
}
12
2つの再帰的拡張メソッドを使用することができます。あなたはmyTreeView.GetAllNodes()
またはmyTreeNode.GetAllNodes()
を呼び出すことができ、次のいずれかのツリービューは、多くのレベルを持っているため
public static List<TreeNode> GetAllNodes(this TreeView _self)
{
List<TreeNode> result = new List<TreeNode>();
foreach (TreeNode child in _self.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
public static List<TreeNode> GetAllNodes(this TreeNode _self)
{
List<TreeNode> result = new List<TreeNode>();
result.Add(_self);
foreach (TreeNode child in _self.ChildNodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
-1
、再帰関数を実行します。
foreach (TreeNode actualNode in treeView1.Nodes) // Begin with Nodes from TreeView
{
AddNodeAndChildNodesToList(actualNode);
}
:ツリービュー内のすべての最初のレベルのノードのために、この関数を呼び出したより
public void AddNodeAndChildNodesToList(TreeNode node)
{
listBox1.Items.Add(node.Text); // Adding current nodename to ListBox
foreach (TreeNode actualNode in node.Nodes)
{
AddNodeAndChildNodesToList(actualNode); // recursive call
}
}
コードはサイトからのものですC# TreeView
1
ノードKeyを一意にする必要はありません。すべてのノードキーを空の文字列(""
)に設定するだけで、Treeview1.Nodes.Find("", true);
を実行してTreeView内のすべてのノードを返すことができます。
関連する問題
- 1. Win32 TreeViewコントロールの幅を取得する
- 2. ツリーノードのuidをすべて取得する
- 3. Linqすべてのコントロールを取得します(注文した)
- 4. TreeViewコントロールで選択されたすべての親(ルートまで)のノードを取得するには?
- 5. ASP.NETすべてのTreeViewノードを取得する
- 6. TreeViewですべての可視ノードを取得する
- 7. レジストリ内のすべてのインスタンス化されたコントロールのリストを取得
- 8. すべてのプレイグラウンドのリストを取得
- 9. すべてのアプリケーションのリストを取得
- 10. WPFのTreeViewコントロール
- 11. すべてのリストを取得せずにサイトコレクションのすべてのサイトを取得しますか?
- 12. TreeViewの要素のリストを取得するには? PyGtk
- 13. Request.Formの属性を持つすべてのコントロールを取得しますか?
- 14. 親コントロールのすべての子を取得するには?
- 15. div内のすべてのリンクを取得してリストに保存します
- 16. ブラックベリー - コントロールのすべての子フィールドを取得
- 17. ASP.NET:すべてのページのコントロールをIEnumerableとして取得する
- 18. django:リストとしてすべての列を取得
- 19. コンストラクタが取るすべての引数のリストを取得
- 20. WebBrowserコントロールからすべてのテキストを取得
- 21. すべてのAzureの場所とサービスのリストを取得しますか?
- 22. ldap3(python3-ldap)内のすべての属性のリストを取得します。
- 23. エイリアスの場所にあるすべてのテーブルのリストを取得します
- 24. MediaStore.Audioは、オーディオを含むすべてのディレクトリのリストを取得します。
- 25. c#SplitContainerのTreeViewコントロールを使用してコンテンツを変更する
- 26. Haskellプロジェクトのすべてのインポートのリストを取得する
- 27. ディレクトリ内のすべてのファイルのリストを取得する(Perl)
- 28. Microsoft Azureのすべてのテーブルのリストを取得する
- 29. Eclipseのすべての変数のリストを取得する
- 30. すべての地域のAWSのすべての価格でリストを取得しますか?
回答に満足していれば、それを受け入れた方が良いでしょう。ありがとう。 – Krumelur