.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」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|