Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
TreeViewの子ノード取得
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=26#CommentId141
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
よねKEN
 (社会人)
投稿日時
2008/10/4 01:48:06
質問のポイントには影響なさそうですが、「何に使うか」の意図の部分が
きちんと理解できていないので、確認させてください。
> ●何に使うか:
> で、全てのノード(全てのフォルダ)を最初からTreeViewに追加すると無駄に重いので
> 子フォルダの存在を示す「+」マーク対策としてノード展開前に
> ・孫ノードが存在するかどうか確認
> ・なければ、そのパスをチェックしフォルダがあれば孫ノードとして追加
> →展開時新たに表示されるノードに「+」が表示される
> という方法を取っています。
孫ノードの存在確認なら、子ノードのNodes.Countを見るだけでOKだと思うので、
任意の孫ノードを取得したい、というのがよくわかりませんでした。
> MSDNを見るとそのように書いてますね。。。
> FirstNodeも含めてMSDNも何度も見ていたんですが、見方が足りなかったようです。
TreeNodeはNodesプロパティを持っていますが、これの0番目が最初の子です。
なので、Nodes.Countでノード数を確認した上で、1つ以上あれば、
Nodes[0]が最初の子ということになります。
子ノードがない場合はFirstNodeはNothingなので使用する前に
Nothingでないかどうかのチェックが必要です。
そういう意味では、Nodes[0]を使うのもFirstNodeを使うのも使い勝手に差はありません。
最初のノードだよとわかりやすくする意味では、Nodes[0]を使うよりFirstNodeの方が
可読性の点ではよいと思います。
FirstNodeを使う場合の処理のパターンとしては、
(1)FirstNodeを現在のノードにセットする。
(2)現在のノードに対する処理をする。
(3)現在のノードのNextNodeを取得し、現在のノードにセットする。
(4) 現在のノードがNothingなら終了、そうでなければ(2)、(3)を繰り返し。
のように使うことになると思っていますが、
これはNodesプロパティから順にノードを列挙し、それに処理をするのと同じで、
私はこちらの方の処理を多く使いますね。
FirstNode/LastNodeNextNode/PrevNodeを使うのは、
ユーザが選択したノードを基準にしてその兄弟ノードの操作をしたいときくらいです。
> 新バージョンの同じ機能でなんでFirstNodeなんや!firstchildnodeやろ!と思ってしまいます。^ ^;
子ノードではないからでしょうね。
ある階層のノード同士の中で「最初の」ノードだからです。
例えば、TreeView.Nodesに同階層で2つのノードだけを追加した状態では、
1つ目がFirstNode、2つ目がLastNodeになるかと思いますが、これらルートなので子ノードではありませんね。
今までの命名が理路整然とされていなかったから、その点は改善されたということだと思っています。