C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: TreeNodeのキーを取得したい


(過去ログ 118 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■69438 / inTopicNo.1)  TreeNodeのキーを取得したい
  
□投稿者/ あめちゃん (1回)-(2013/12/26(Thu) 20:04:00)

分類:[VB.NET/VB2005 以降] 

環境
VB.NET VisualStudio2010
.Net4.0

TreeView、TreeNodeについての質問です。

TreeNodeをAddするとき、
parentNode.Nodes.Add(key,value)
の形式にすることで、ノードにキーを持たせることができますが、
このキーをあとからデバッグ画面で確認することはできないのでしょうか。

ノードのキーから親ノードを指定して子ノードを追加、という処理を行っているのですが、
親ノードが存在するのにとれないことがあり、そのとき親ノードにどのようなキーが設定されているのか
デバッグ中に確認したいのですが、TreeNodeのプロパティメンバーにKeyの項目がないのです。

どなたかおわかりの方いましたら、ご教授お願い致します。

引用返信 編集キー/
■69439 / inTopicNo.2)  Re[1]: TreeNodeのキーを取得したい
□投稿者/ あめちゃん (2回)-(2013/12/26(Thu) 20:45:58)
Keyを見る方法はまだわかりませんが、
Keyからノードを見つけられない理由がわかりました。
ノード移動をしたときに、移動先の階層構造に準じたキーに更新していないからでした。

しかし、ノードのキーのみを更新する方法がわからず、

newNode = CType(moveNode.Clone(), TreeNode)

としていたものを、

newNode = parentNode.Nodes.Add(key,value)

としてみました。
( http://dobon.net/vb/dotnet/control/tvdraganddrop.html を参考にしています。)


すると、当たり前ですが配下のノードが消えてしまいます。

For Each cNode As TreeNode In moveNode.Nodes

' 配下のノードを再作成する
newNode.add(cNode)

Next

とすれば対応できますが、その場合、cNodeのキーを更新する場合はまたKey,Valueを指定してAddし、
そうするとまた配下のノードが消えるのでFor EachでAddして・・
というようなことになってしまいます。

最悪この方法で対応するしかないのですが、
もっとましな方法はないものでしょうか・・。

どなたかわかる方、お願いします。

引用返信 編集キー/
■69440 / inTopicNo.3)  Re[2]: TreeNodeのキーを取得したい
□投稿者/ Hongliang (149回)-(2013/12/26(Thu) 21:12:39)
http://msdn.microsoft.com/ja-jp/library/57aa8e09.aspx
とかの解説にありますが、TreeNode::Nameプロパティが対応します。

移動させるのであれば、
Dim sourceNodes = ... ' 移動させるノードを持つTreeNodeCollectionを取得
Dim destNodes = ... ' 移動先のTreeNodeCollection
Dim node = sourceNodes[...]
sourceNodes.Remove(node)
' node.Name = ... ' 必要に応じて名前を変更する
destNodes.Add(node)
でいけると思います。

// Key/Name自体は特に階層とかは持っていないので、「階層構造に準じた」というのがちょっと分かりません。
引用返信 編集キー/
■69441 / inTopicNo.4)  Re[3]: TreeNodeのキーを取得したい
□投稿者/ あめちゃん (3回)-(2013/12/26(Thu) 21:32:01)
Hongliang 様

Nameプロパティが対応していたのですね!
調べ不足でした。
ありがとうございます。

Dim node As TreeNode = Ctype(dropNode.Clone(),TreeNode)
node.Name = strKey
node.Text = strValue
destNodes.Nodes.Add(node)
dropNode.Remove()

とすることで、やりたかった処理が実現しました。

#提示いただいたコードを見るに、
移動したいノードを先にRemoveすることで、CloneせずともAddすることができるようになるのでしょうか?
試してみようと思います。

#階層構造については、ツリーを作成するために持たせているキーの中身なのですが、
自分の開発環境におけるローカルなワードでした。まぎわらしくしてしまい申し訳ありません。

本当に助かりました。
ありがとうございました。


No69440 (Hongliang さん) に返信
> http://msdn.microsoft.com/ja-jp/library/57aa8e09.aspx
> とかの解説にありますが、TreeNode::Nameプロパティが対応します。
>
> 移動させるのであれば、
> Dim sourceNodes = ... ' 移動させるノードを持つTreeNodeCollectionを取得
> Dim destNodes = ... ' 移動先のTreeNodeCollection
> Dim node = sourceNodes[...]
> sourceNodes.Remove(node)
> ' node.Name = ... ' 必要に応じて名前を変更する
> destNodes.Add(node)
> でいけると思います。
>
> // Key/Name自体は特に階層とかは持っていないので、「階層構造に準じた」というのがちょっと分かりません。
引用返信 編集キー/
■69450 / inTopicNo.5)  Re[4]: TreeNodeのキーを取得したい
□投稿者/ あめちゃん (4回)-(2013/12/27(Fri) 09:18:54)
解決済みにするのを忘れていました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -