- - PR -
TreeViewでのNode追加の方法を教えてください。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2008-10-23 17:33
その親ノードも TreeNode クラスなのですから Nodes コレクションを持ちます。 つまり Nodes.Add メソッドで良いです。 その他の場合も同じです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 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」とかが表示されますが、使い方がよく 分からないんです。よろしくお願いいたします。 | ||||
|
投稿日時: 2008-10-23 18:19
教えて欲しい事が何なのかわかりません。
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-23 18:51
お返事ありがとうございます。
表現がまずくて申し訳ありません。 ソースは、VB2005.NETで、TreeViewとButtonを貼付け、記載ソースのSUBの 中身だけを、Button1_Click の中に貼り付ければ動きます。 やりたいことは、 親ノード指定.Nodes.Add(子ノード指定) で、親ノード指定を動的にコードで記述したいということです。 まずは、ご紹介いただいたMSDNを見てみます。 | ||||
|
投稿日時: 2008-10-23 19:28
そのままで Parent プロパティで良いと思いますが? http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treenode.parent(VS.80).aspx _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-10-23 19:48
たぶん本当に知りたいことは、何かのノードの親ということではなくて、TreeViewの中から(何か見分けのつくような目印のある)特定のノードを探して指定する方法なのかな、と思いました。 ↑の予想が合っているという前提になりますが、どうやってノードを追加しているかにもよりますので、その情報がほしいと思います。 もし、ノードを作成する部分の処理がまだなのであれば…TreeViewへノードを追加する方法から順に学ばれたほうがよいと愚考します。 たとえばこことか。 http://www.atmarkit.co.jp/fdotnet/dotnettips/259treeviewadd/treeviewadd.html # 予想が外れていたら、ただのゴミレスなんで気にしないでください。 | ||||
|
投稿日時: 2008-10-24 01:07
じゃんぬねっとさんの答えで十分理解出来そうですが、TreeViewでいつも
レスがありますが、大概にしてわかってくれませんよねw。 B木とか双方向リストとか知っていると子供とその親ってだけの仕組みなんで 質問するまでも無い内容なんですけどね。 親−子−孫−ひ孫−?孫−... | | | | 親 子 孫 ひ孫 ツリービューはカレントノードは実は子を持たない親なんです。ってだけです。 持っているなら子沢山の親。 親に子を追加すると、子は自動的(Parentプロパティ)に親を認識します。 なんで、Nodes.add() で全てまかなえるってわけです。 親を持たない親が一番上位の親てわけで、ko.Parent.Parent.... てやると 親を辿れます。 エントリが3個しか無いハッシュテーブルとか作ってみると理解出来ます。たぶん。 |