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

TreeViewでのNode追加の方法を教えてください。

投稿者投稿内容
ずっと初心者
会議室デビュー日: 2008/10/02
投稿数: 9
投稿日時: 2008-10-23 15:23
VB2005を使って、データベースから読み込んだ部品表をTreeViewで表示しようとしています。
予めNodeを登録するのではなく、見つける都度登録したいのです。
以下のようなコーディングをしてみました。
本例は、「子0」の下に「孫0」〜「孫3」がくっつきます。
例えば、このSubの後半に、「子2」の下に「孫4」を付けるにはどうしたら
いいでしょうか?
マウスクリックで、クリックしたノードの下に追加する例を見ましたが、
この場合は、イベントハンドラーが「e.node」の形で、親ノードを教えて
くれますが、コード記述で、「ここへ追加」という方法がわかりません。
よく分からないのは@を記入しておき、@’を抜くと、しかられます。
またA’に代えてAを記入すると、Cnode が宣言されてないなんてしかられます。
A'は苦肉の策です。よろしくお願いします。

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim rootNode As TreeNode = New TreeNode()
Dim Tempnode As TreeNode = New TreeNode()
Dim i As Integer
'Dim GCNode As TreeNode = New TreeNode() '----@

'親ノードの作成
rootNode.Text = "ルート"
TreeView1.Nodes.Add(rootNode)

Tempnode = rootNode 'カレントの親ノードを指定
For i = 0 To 5
Dim CNode As New TreeNode("子" + i.ToString)
rootNode.Nodes.Add(CNode)
If i = 0 Then
Tempnode = CNode    'A’
End If
Next
rootNode = Tempnode
'----- ATempnode = cnode ------
For i = 0 To 3
Dim GCNode As New TreeNode() '------@’
GCNode.Text = "孫" + i.ToString
rootNode.Nodes.Add(GCNode)
Next

End Sub
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-23 17:33
引用:

ずっと初心者さんの書き込み (2008-10-23 15:23) より:

マウスクリックで、クリックしたノードの下に追加する例を見ましたが、
この場合は、イベントハンドラーが「e.node」の形で、親ノードを教えて
くれますが、コード記述で、「ここへ追加」という方法がわかりません。


その親ノードも TreeNode クラスなのですから Nodes コレクションを持ちます。 つまり Nodes.Add メソッドで良いです。 その他の場合も同じです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ずっと初心者
会議室デビュー日: 2008/10/02
投稿数: 9
投稿日時: 2008-10-23 18:02
表現がまずかったので補足いたします。マウスクリックのイベントによると、
以下のように書けます。(Netで調べた丸写しです。すみません。)

Private counter As Integer = 0
' TreeViewコントロールに項目を1つだけ追加します。
Private Sub treeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeView1.AfterSelect
If counter > 0 Then
Dim treeNodeNew As New TreeNode("追加" + counter.ToString())
e.Node.Nodes.Add(treeNodeNew)    '----@
End If
counter = counter + 1
End Sub
つまり、親ノードの指定は@のように「e.Node」で済んでいます。コードでどこの何々を
指定していないのです。コードで親ノードを指定する方法を教えて欲しいのです。
Nodes. 以下には「Find」とか「key」とか「index」とかが表示されますが、使い方がよく
分からないんです。よろしくお願いいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-23 18:19
教えて欲しい事が何なのかわかりません。
  1. タイトル通り TreeView での Node 追加の方法
  2. あるノードの親ノードの指定方法
  3. わからない事がわからないから教えて欲しい
  4. とりあえず理屈はいいからソースを動くように書き換えて欲しい
  5. その他

引用:
Nodes. 以下には「Find」とか「key」とか「index」とかが表示されますが、使い方がよく分からないんです。


MSDN で調べたらわかりますよ。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treeview.nodes(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treenodecollection_members(VS.80).aspx
ずっと初心者
会議室デビュー日: 2008/10/02
投稿数: 9
投稿日時: 2008-10-23 18:51
お返事ありがとうございます。
表現がまずくて申し訳ありません。
ソースは、VB2005.NETで、TreeViewとButtonを貼付け、記載ソースのSUBの
中身だけを、Button1_Click の中に貼り付ければ動きます。
やりたいことは、
 親ノード指定.Nodes.Add(子ノード指定)
で、親ノード指定を動的にコードで記述したいということです。

まずは、ご紹介いただいたMSDNを見てみます。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-23 19:28
引用:

ずっと初心者さんの書き込み (2008-10-23 18:51) より:

親ノード指定.Nodes.Add(子ノード指定)
で、親ノード指定を動的にコードで記述したいということです。


そのままで Parent プロパティで良いと思いますが?
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treenode.parent(VS.80).aspx

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-23 19:48
引用:

ずっと初心者さんの書き込み (2008-10-23 18:51) より:

やりたいことは、
 親ノード指定.Nodes.Add(子ノード指定)
で、親ノード指定を動的にコードで記述したいということです。



たぶん本当に知りたいことは、何かのノードの親ということではなくて、TreeViewの中から(何か見分けのつくような目印のある)特定のノードを探して指定する方法なのかな、と思いました。

↑の予想が合っているという前提になりますが、どうやってノードを追加しているかにもよりますので、その情報がほしいと思います。
もし、ノードを作成する部分の処理がまだなのであれば…TreeViewへノードを追加する方法から順に学ばれたほうがよいと愚考します。

たとえばこことか。
http://www.atmarkit.co.jp/fdotnet/dotnettips/259treeviewadd/treeviewadd.html

# 予想が外れていたら、ただのゴミレスなんで気にしないでください。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-10-24 01:07
じゃんぬねっとさんの答えで十分理解出来そうですが、TreeViewでいつも
レスがありますが、大概にしてわかってくれませんよねw。
B木とか双方向リストとか知っていると子供とその親ってだけの仕組みなんで
質問するまでも無い内容なんですけどね。

親−子−孫−ひ孫−?孫−...
  | |  |  |
  親 子  孫 ひ孫
ツリービューはカレントノードは実は子を持たない親なんです。ってだけです。
持っているなら子沢山の親。

親に子を追加すると、子は自動的(Parentプロパティ)に親を認識します。
なんで、Nodes.add() で全てまかなえるってわけです。

親を持たない親が一番上位の親てわけで、ko.Parent.Parent.... てやると
親を辿れます。

エントリが3個しか無いハッシュテーブルとか作ってみると理解出来ます。たぶん。


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