• ベストアンサー

【C#】TreeViewでクリックした親ノードと、子ノードを表示させた

【C#】TreeViewでクリックした親ノードと、子ノードを表示させたい C#初心者です。 TreeView(treeView1)で親ノードをクリックしたら、その親ノード+子ノードを、別のTreeView画面(treeView2)に表示させたいのですが、やり方がわかりません。 例えば、 +A  -B  -C +D  -E というTreeViewの場合、Aの親ノードをクリックしたら、Aの親ノードと、BとCの子ノードが、別画面(treeView2)に表示されるようにしたいです。 どなたか分かる方いらっしゃいましたら教えていただけると幸いです。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

あまり詳しくはないのですが、ノードのサブツリーを含めたコピーはCloneメソッドを使うと簡単そうです。 「C# treenode clone」などで検索すると様々なサンプルが得られます。少し考えて下記のコードでできたと思います。 Windows7 + Visual C# 2010 Expressで試しています。 private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode CloneNode = (TreeNode)e.Node.Clone(); treeView2.Nodes.Clear(); treeView2.Nodes.Add(CloneNode); treeView2.Nodes[0].Expand(); // rootを展開 }

bonnnu1126
質問者

お礼

おかげ様で解決しました。 ご回答ありがとうございました。

その他の回答 (1)

  • wtm909
  • ベストアンサー率60% (3/5)
回答No.1

机上だけで実際にコードを書いていませんので間違いが有るかもしれません。 treeView1のNodeMouseClickイベントにて、 引数TreeNodeMouseClickEventArgs(標準でe)の.Nodeプロパティ(=クリックしたノード)を見て treeView2に追加すればよいかと思われます。

bonnnu1126
質問者

お礼

参考になりました。ご回答ありがとうございました。

関連するQ&A

  • C# TreeViewのノードの判定

    TreeViewでクリックしたノードの位置が親ノード(+の位置)かそれとも配下の子ノード なのか判定することはできますでしょうか。

  • 【C#】TreeViewがクリックされたら、その部分を別の領域に表示さ

    【C#】TreeViewがクリックされたら、その部分を別の領域に表示させたい お世話になります。C#初心者です。 TreeViewがクリックされたら、クリックされた部分だけを別画面(textBoxやLabelなど…)に表示させたいのですが、調べてもよくわかりません。 分かる方いらっしゃいましたらご回答いただけると幸いです。 宜しくお願いいたします。

  • TreeView の初期表示について

    TreeView に『A』『B』『C』のノードがあるとします。 初期表示を『B』ノードを選択・展開した状態(子ノードあり)にしたいのですが、 方法がわかりません。 何かよい方法はないでしょうか?よろしくお願いします。 説明不足な点はすぐに補います。

  • ToolStripMenuItemのクリックイベントからTreeViewのノードを取得したい

    C#3.5を使用しています。 TreeViewのContestMenuStripのToolStripMenuItemをクリックしたときに どの(複数のノードに同じContestMenuStripをセットしています)TreeViewのノードからのToolStripMenuItemが クリックされたかを知るためにEventArgs e からTreeViewの選択されてるノードが取得したいのですが、 どうすれば良いのでしょうか? private void itemAddToolStripMenuItem_Click(object sender, EventArgs e) { var ev = (System.Windows.Forms.ToolStripItemEventArgs)e;// ToolStripItemEventArgsにキャストすればよいかと思ったのですがエラーになります・・・ }

  • C# TreeView 効率良いノード追加の仕方

    C# TreeViewについて質問させてください。 ノード(子ノード含む)を数万件以上登録する際に、効率の良い方法を教えて頂けないでしょうか? 実際のコードとは異なりますが、大まかに以下のような処理をメインスレッドで行っています。 class MyTreeNode : TreeNode{   void AddNode(){     BeginUpdate();     SuspendLayout();     foreach( var 親ノード情報 in 親ノード情報リスト ){       TreeNode parentNode = new TreeNode( 親ノード名 );       foreach( var 子ノード情報 in 子ノード情報リスト ){         TreeNode childNode = new TreeNode( 子ノード名);         parentNode.Nodes.Add( childNode );       }       this.Nodes.Add( parentNode );     }     ResumeLayout();     EndUpdate();   } } この方法ですと、かなり時間がかかってしまい、UIが固まったようになってしまいます。 (TreeViewに、子ノードの一斉展開機能が必要なので、親ノード展開時のイベントを拾って  子ノードを追加する方法は上記と同じく遅くなってしまうのではと思っていますがどうなんでしょうか?)

  • C# treeviewについて

    VS2017で独学でC#を勉強しています。 treeviewでエクスプローラのようにドライブを表示する方法を教えてください。 それとtreeviewで検索しているとノードという単語がでてきます。 これは何のことでしょうか? treeviewにこだわっているわけではなく、エクスプローラのように表示する方法でしたらなんでもいいです。 よろしくお願いします。

  • VB2005 TreeViewの任意ノード選択

    お世話になっております。 VB2005でWinアプリを開発中です。 ルートノードは1つで、 そこから子、孫、ひ孫・・・と階段状になるTreeViewを作っています。 親   L子      L孫         Lひ孫             ・・・・ このようなツリーに対し、プログラムで任意のノードを選択状態にしたいのですが、 ノードの名称などで一発で指定する方法はありますでしょうか?? 上の例で、「孫」を選択状態にしたい場合、 TreeView1.SelectedNode = TreeView1.Nodes(0).Nodes(0).Nodes(0) と書けば、できることはできるのですが。 他にもっとよい方法があるはずと思うのですが、見つけられませんでした。 VB6.0なら、下記に方法があったのですが・・・ http://oshiete1.goo.ne.jp/qa732490.html よろしくお願いします。

  • TreeViewコントロールについて

    VB2005環境です。 TreeViewコントロールを作成し、ノードごとにクリックイベントを 追加して、タブコントロールを呼び出すようにしたいと考えています。 (親ノードをクリックしたら、親ノード用のタブコントロールが 画面に表示され、さらに子ノードAをクリックすると、ノードA用の タブコントロールが表示される、ノードBをクリックすると…という具合に)。 NodeMouseClickイベントを使えば良いのかとは思うのですが、クリックイベントが 子ノード各々ごとに取得できず困っています。 やり方を教えていただけないでしょうか? 更に、そこから各々専用のタブコントロールを呼び出す方法も 教えていただけるとありがたいです。 よろしくお願いします。

  • VB2005 TreeViewの選択されてノード表示

    最近VB2005を使い始め苦戦しています。 ГA:\ |-C:\ | |-AAA | LBBB | |-xxx | |-yyy | Lzzz LD:\ VB2005 TreeViewを使用し、上記の階層の"zzz"をクリックした際、以下の事がしたく投稿しました。 Q1: テキストボックスへ一発で"zzz"を表示したいのですが、一度クリックをし"+"を表示後クリックしないと表示されません。 Q2: SelectedNode.Textで得たカレントフォルダ名から絶対パスを取得したいのですが可能ですか?。 解決策をご存知の方よろしくお願いいたします。

  • C# TreeViewについて

    親 親/子1 親/子1/子2 親/子1/子3 親/子1/子3/子4 親/子1/子3/子4/子5 親/子6 親/子6/子7 親/子6/子8 と言うような文字列を上から一行ずつ読み込んで 親 |- 子1 |   |- 子2 |   |- 子3 |       |- 子4 |           |- 子5 | |- 子6 |   |- 子7 |   |- 子8 みたいな感じで TreeViewに表示させたいのですがどのように書けば良いでしょうか?