DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TreeView の基礎的な使い方

環境/言語:[WIN2000 VB.NET 2003]
分類:[.NET]

VB.NETの初心者です宜しくお願いいたします。
TreeView を使用したプログラムを作成中ですがかなり基本的なところでつまずいています。
TreeView 自体の作成は出来ましたが以下の点がわかりません

Tree の構造が

A1
+ AA1
+ AA2
+ AAA1
+ AAA2
B1

のようになっていたと仮定して以下の事柄がわかりません

1.たとえば AAA1 を選択した場合
 (TreeView1_AfterSelect イベントで取得しています)
  e.Node.Index でインデックスを見ると 0 となり、ルート(A1)からのインデックス位置 たとえば 今の例では 0-1-0 のような値を取ることは出来ないのでしょうか?
  ※selectedNode.FullPath での使用方法はなんとなくわかるのですが
   インデックス値として取得する方法が知りたいです

2.任意のノードをセレクト状態にする方法

以上の手法がわかりません宜しくお願いいたします
  
>   e.Node.Index でインデックスを見ると 0 となり、ルート(A1)からのインデックス位置 たとえば 今の例では 0-1-0 のような値を取ることは出来ないのでしょうか?

TreeNode オブジェクトには Parent プロパティがあり、これで親の TreeNode オブジェクトを取得できます。
これを使って、Parent が Nothing になるまで Loop を使って遡っていって、コレクション(System.Collections の ArrayList、あるいは System.Collections.Generic の List(Of Integer) 辺りですね)にそれぞれのインデックスを追加していけばいいでしょう。
// 末端から遡っていくわけですから、ルートノードからの順番なら Reverse する必要がありますが。
イメージはつかめますか?


>   ※selectedNode.FullPath での使用方法はなんとなくわかるのですが
>    インデックス値として取得する方法が知りたいです

FullPath は使いづらいプロパティです。何故なら、複数のノードが同じ文字列を持ちうるからです。そのためにノード固有の値にはなり得ません。
どこか(フォームのタイトルとか)に表示するなど、そう言う用途限定で使用すべきでしょう。


> 2.任意のノードをセレクト状態にする方法

まずどうやって「任意のノード」を特定しようと考えていますか?
ありがとうございました、問題は解決しました。
1.のセレクトした位置のIndeXを配列に格納する方法で解決しました
Parent をたぐって先頭までのIndexを順番に配列に格納することで目的の結果が得られました。
2.の任意の場所のノードをセレクトする場合は 1.で求めた配列を使い、先頭から順番にインデックスをセットすることで解決しました。

何か1つの関数などでインデックス値が取れたりするのかと思っていましたがこのようなロジックが必要なのですね!
とても参考になりましたありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板