VB6 TreeViewコントロールで、既に作成されたツリーの中から、選択されたノードが持つ全ての階層の子ノードを展開するにはどのようにしたら宜しいでしょうか?
以下だと、1階層下の子ノードだけしか展開しません。
Dim objNode As Node
For Each objNode In TreeView1.Nodes
If (objNode Is TreeView1.SelectedItem) Then
objNode.Expanded = True
End If
Next
過去ログ検索『Expanded』でどうぞ。
過去ログの紹介、ありがとうございます。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200401/04010145.txt
にある、oku さんの再帰処理を使用したソースで、できました。
Private Sub Command1_Click()
Call ExpandedSubNodes(TreeView1.SelectedItem)
End Sub
Private Sub ExpandedSubNodes(ByVal BaseNode As Node)
If Not BaseNode Is Nothing Then
Dim objNode As Node
If BaseNode.Children > 0 Then
BaseNode.Expanded = True
End If
Set objNode = BaseNode.Child
Do Until objNode Is Nothing
Call ExpandedSubNodes(objNode)
Set objNode = objNode.Next
Loop
End If
End Sub
これで完璧ですが、勉強のために伺います。
ExpandedSubNodes()の様な、再帰呼び出しのプロシージャを別に用意せずに、Command1_Click()内で完結する方法ってあるんでしょうか?
過去ログ検索『TreeView』にあるサンプルに全て目を通して
理解できる実力をつければ、おのずと道は開かれますが…
『勉強のために』という言葉は買うけど、勉強って↑みたいな
ことでしょ?他人に聞くのは勉強じゃないよ。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200511/05110165.txt
>For Each N In TreeView1.Nodes
> If N.Parent Is Nothing Then
> '処理
> End If
>Next
のループでできない?
…ってゆーか質問のコードに戻るなw
> If (objNode Is TreeView1.SelectedItem) Then
なんでこんな条件にしてんの?条件のければ
良いだけじゃないの?
> なんでこんな条件にしてんの?
言われてみると、質問のコードは、
TreeView1.SelectedItem.Expanded = True
と、同じことでした。
> 条件のければ良いだけじゃないの?
条件を除くと、ルート以下の全ノードが展開されます。
> 他人に聞くのは勉強じゃないよ。
と言う指摘があったので、質問を取り消し、自力解決を目指します。
ツイート | ![]() |