|
.NET TIPS TreeViewコントロールで現在選択されているノードを変更するには?[C#、VB]デジタルアドバンテージ 遠藤 孝信2008/08/21 |
![]() |
|
|
|
TreeViewコントロール(ツリービュー)は、エクスプローラの左側のペインなどで使用されている、木構造のデータを表示するためのコントロールだ。
通常、TreeViewコントロールのノード(ツリー上の項目)の選択は、ユーザーがマウスなどで行うが、現在選択されているノードをプログラムから変更することもできる。しかし、ボタンがクリックされたときなどのタイミングでこれを行うと、選択されているノードが反転表示されず、現在選択しているノードが分からなくなる場合がある。本稿ではその対処について解説する。
TreeViewコントロールへのノードの追加
まずはTreeViewコントロールにノードを追加する手順について簡単に説明しておく。なお、TreeViewコントロールにおいて、ノードを表すクラスはTreeNodeクラス(System.Windows.Forms名前空間)である(「TIPS:TreeViewコントロールへ項目を追加するには?」も併せて参考にしていただきたい)。
最初に、TreeViewコントロールのルートにノードを追加する。これは、TreeViewコントロールのNodesプロパティに対して、AddメソッドによりTreeNodeオブジェクトを追加する。
TreeNodeオブジェクトもまた、その子ノードを保持するためのNodesプロパティを持っており、同様にしてAddメソッドにより子ノードを追加できる。
以下では例として、Cドライブのディレクトリ構造をTreeViewコントロールで表示するサンプル・コードを示す。WindowsフォームにはTreeViewコントロールを1つ配置し、フォームのLoadイベント・ハンドラと、TreeViewコントロールのAfterSelectイベント・ハンドラを記述している。後者は、配置したTreeViewコントロールをダブルクリックすれば、メソッドのひな型が自動作成される。
| ||
| フォルダをツリービューで表示するサンプル・コード(上:C#、下:VB) | ||
| 追加した2つのイベント・ハンドラのみを抜粋。treeView1/TreeView1は配置したTreeViewコントロールを参照している。なお、DirectoryクラスやPathクラスを使用しているため、コードの先頭でSystem.IO名前空間をusing文/Imports文によりインポートする必要がある。 |
AfterSelectイベント・ハンドラでは、クリックされたノードを「e.Node」として取得できる。また各ノードでは、TreeNodeコンストラクタ呼び出し時に表示文字列(ラベル)としてフォルダ名を指定しているため、「e.Node.FullPath」により、そのノードに対応したフォルダのフルパスを得ることができる。
上記コードを実行した場合の画面は次のようになる。
![]() |
| 上記サンプル・コードの実行画面 |
| フォルダをクリックすると、その下の階層のフォルダが表示される。 |
選択されているノードの変更
ではここで、上記のサンプル・プログラムに[1つ上へ]ボタンを追加してみよう。これは現在選択されているノードを、1つ上のノード(親ノード)に変更するためのものだ。
![]() |
| [1つ上へ]ボタンを追加 |
現在選択されているノードは、TreeViewコントロールのSelectedNodeプロパティで取得/設定できる。このプロパティに既存のTreeNodeオブジェクトを代入すれば、そのノードが選択されるというわけだ。また、あるノードの1つ上のノードというのは、TreeNodeオブジェクトのParentプロパティから取得できる。
従って、[1つ上へ]ボタンのClickイベント・ハンドラは次のような内容になる。なお、ルート・ノードのParentプロパティの内容は常にnull/Nothingである。
| ||
| [1つ上へ]ボタンのClickイベント・ハンドラ(上:C#、下:VB) |
ここでポイントとなるのが、最後の行のTreeViewコントロールへのフォーカスの設定だ。これがないと、ボタンがクリックされたときにフォーカスがボタンに移ったままになり、TreeViewコントロールで現在どのノードが選択されているのかが分からなくなってしまう。![]()
| カテゴリ:Windowsフォーム 処理対象:TreeViewコントロール 使用ライブラリ:TreeViewコントロール(System.Windows.Forms名前空間) 使用ライブラリ:TreeNodeクラス(System.Windows.Forms名前空間) 関連TIPS:TreeViewコントロールへ項目を追加するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




