投稿者 よね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になるかと思いますが、これらルートなので子ノードではありませんね。

今までの命名が理路整然とされていなかったから、その点は改善されたということだと思っています。