@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

TreeViewの展開状態を初期に戻す

1
投稿者投稿内容
Toshi
会議室デビュー日: 2008/01/23
投稿数: 4
投稿日時: 2008-01-30 00:33
お世話になります。VisualStudio2005でWeb開発を勉強しております。(VB)
掲題について質問させていただきます。

データベースからデータを取得してツリーを作成しており、
ExpandDepthプロパティを「3」にしています。ノードを展開したときに、
動的に追加するようPopulateOndemandの設定をしてあります。

上記のツリーがどのように展開されようと、ボタンを押すと
初期の展開状態(Expanddepthが3の状態)に戻したいのですが
ボタンクリック時のイベントにどのように記載すればよいでしょうか。

今まで調べた結果としては、以下のようなFor each文で全てのNodeについて
階層を調べて、展開・折りたたみする、というようなものなのですが
もっと簡単に実現する方法がありましたら、よろしくお願いいたします。

Dim e as Treenode
for each e in Treeview1.nodes
if n.Depth = 0 then
e.Expand()
else
e.collapse()
End if
next
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-01-30 14:38
提示されたコードを見た限りでは、他にも幾つかの展開・縮小のコードを記述してるように思えますね。。。
(提示コードではルートノードしか展開されていないので)

下記の様にコーディングしてみてはどうでしょう?
コード:

Sub InitExpand(ByVal node As TreeNode, ByVal depth As Integer)
If (node.Depth < depth Or depth = -1) Then
node.Expand()

For Each child_node As TreeNode In node.ChildNodes
InitExpand(child_node, depth)
Next
Else
node.CollapseAll()
End If
End Sub


初期展開に戻したい位置では、下記の様に呼び出してください。

コード:

For Each root_node As TreeNode In Me.TreeView1.Nodes
Me.InitExpand(root_node, Me.TreeView1.ExpandDepth)
Next



【編集】
旧:If (node.Depth < depth) Then
新:If (node.Depth < depth Or depth = -1) Then
ExpandDepth値が初期値(-1:全展開)の場合に対応したコードに修正

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-01-30 15:10 ]
Toshi
会議室デビュー日: 2008/01/23
投稿数: 4
投稿日時: 2008-02-09 00:31
回答ありがとうございました。

時間がかかってしまいましたが、教えていただきましたコードを理解
できました。実際にプログラムの中に記載して動作を確認しました。
(ご指摘がありましたとおり、最初のコードでは一番上の階層しか展開できていませんでした。)
お世話になりました。

1

スキルアップ/キャリアアップ(JOB@IT)