タイトル | : Re^7: TreeViewのツリー構造固定 |
記事No | : 8978 |
投稿日 | : 2009/05/18(Mon) 13:31 |
投稿者 | : 魔界の仮面弁士 |
>> N = TreeView1.Nodes(1) > は考えましたが、それはカウントなので、 カウントというか、位置ですね。 そのノードの位置を同階層内の先頭に移動させた場合、TreeNode.Index は 0 になります。
┣Node1 … TreeView1.Nodes(0) ┃┣Node4 … TreeView1.Nodes(0).Nodes(0) ┃┃┣Node10 … TreeView1.Nodes(0).Nodes(0).Nodes(0) ┃┃┗Node11 … TreeView1.Nodes(0).Nodes(0).Nodes(1) ┃┗Node5 … TreeView1.Nodes(0).Nodes(1) ┃ ┣Node12 … TreeView1.Nodes(0).Nodes(1).Nodes(0) ┃ ┗Node13 … TreeView1.Nodes(0).Nodes(1).Nodes(1) ┣Node2 … TreeView1.Nodes(1).Nodes(0) ┃┣Node6 … TreeView1.Nodes(1).Nodes(0).Nodes(0) ┃┗Node7 … TreeView1.Nodes(1).Nodes(0) ┗Node3 … TreeView1.Nodes(2) ┣Node8 … TreeView1.Nodes(2).Nodes(0) ┃┣Node14 … TreeView1.Nodes(2).Nodes(0).Nodes(0) ┃┗Node15 … TreeView1.Nodes(2).Nodes(0).Nodes(1) ┗Node9 … TreeView1.Nodes(2).Nodes(1) ┗Node16 … TreeView1.Nodes(2).Nodes(1).Nodes(0)
> 指定しづらい アプリが求める仕様、プログラムの実装によって、「指定しやすい」記述法は異なります。
たとえばファイルパスのように、キーとなる情報がそれぞれのノードにあるのか、 それともノードを「位置」のみで管理しているのかなど、作成したいプログラムごとの 管理方法によって適切なコードは異なりますので、先の発言では >> 指定方法は幾通りもあります。 という発言に留めています。
>> また、下位の層まで辿って探したい、あるいは同名ノードが複数ある場合には、 >> Ns = TreeView1.Nodes.Find("XXX2", True) > もしかして、変数の事ですか? 変数の名前というか、ノードの名前の事です。具体的には、TreeNode.Name プロパティ。 TreeView1.Nodes.Add("Key1", "Text1") とした時の Key1 の部分という言い方もできますね。
> Dim XXX123 As TreeNode = New TreeNode("XXX123")で、N = TreeView1.Nodes.Find(New TreeNode() {XXX123})ですよね? 違います。…というか、それだと Find メソッド部はコンパイルすら通りませんよね。
第一、変数『XXX123』を保持しているなら、それをそのまま指定時に使えば良いだけで、 検索して変数『N』に入れなおす必要はないかと思いますよ。 検索しなおしたところで、変数 N と 変数 XXX123 は同じ物を指し示す事になるだけかと。
> > あるいは、ノード名ではなく、表示名(Textプロパティ)から探したいのであれば、 > > Nodes プロパティを再帰的に列挙してやれば良いかと。 > そうですか?Textプロパティから探す方法があるとは知りませんでした。 そのためのメソッドがあるわけでは無いのですが、特別な方法というわけでもありません。 単純に、各ノードを再帰的に列挙しながら、TreeNode.Text を見ていくだけですよ。
Function FindSingleNodeByText(ByVal nodes As TreeNodeCollection, ByVal text As String) As TreeNode For Each node As TreeNode In nodes If node.Text = text Then Return node Dim N As TreeNode = FindSingleNodeByText(node.Nodes, text) If N IsNot Nothing Then Return N Next Return Nothing End Function
# 該当する複数のノードを返したい場合は、配列として返した方が良いかも。
> 同じTextがあるので、使い避けたいかも? どのようにしてツリーを管理したいのかわからないので、明言は出来ませんが、 TreeNode.Name や TreeNode.Index や TreeNode.Text 等でも特定できないなら、 追加情報となるプロパティを、TreeNode に追加してやれば OK かと。
|