.NET TIPS テキストボックスでオートコンプリート機能を使用するには?[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2006/03/10 |
|
|
.NET Framework 2.0のTextBoxコントロール(System.Windows.Forms名前空間)にはオートコンプリート機能が追加されている*。この機能は、TextBoxコントロールに文字の一部を入力すると、その入力内容を予測して、入力される可能性のある項目(=補完候補)の一覧を表示したり、文字の続きを自動的に補完したりする機能である。
* オートコンプリート機能は、TextBoxコントロールのほかにComboBoxコントロールや、ツールバー(ToolStripコントロール)内に配置するToolBoxTextBoxコントロールおよびToolBoxComboBoxコントロールでも使用できる。 |
TextBoxコントロールのオートコンプリート機能による補完 |
テキストボックスに「http://www.at」と入力したところ。 IEなどで入力されたURLの履歴から補完候補の一覧を表示し、かつ 入力した文字の後半部分(図中の反転している部分)を自動的に補完する機能がある。このサンプル・プログラムは、オートコンプリート機能の設定に必要な2つのプロパティの値を動的に変更して、オートコンプリート機能の挙動を確認するためのもの。詳細は本文後半を参照。 |
Windowsアプリケーションでは、IEのアドレス・バーやエクスプローラのアドレス・バー、[ファイルを開く]ダイアログのファイル名入力部分などがオートコンプリート機能を持っているが、これらと同等の機能を独自アプリケーションのテキストボックスに持たせることが可能だ。
オートコンプリート機能により一覧表示されたり、入力文字に追加されたりする補完候補のリスト(=オートコンプリート機能のソース)としては、IEのアドレス・バーで入力されたURLの履歴や、ファイルシステム(ドライブ内のディレクトリ名やファイル名)などを指定できる。また独自の文字列のリストもソースとして指定可能だ。
オートコンプリート機能に必要な設定
TextBoxコントロールでオートコンプリート機能を使用可能にするには、AutoCompleteModeプロパティとAutoCompleteSourceプロパティの2つを設定する。
AutoCompleteModeプロパティはオートコンプリート機能の動作を指定するためのもので、AutoCompleteMode列挙体(System.Windows.Forms名前空間)の値を指定する。これによって補完候補の一覧をドロップダウン・リストとして表示するか、入力した文字の後ろに続けて補完候補を表示するか(あるいはこれらの組み合わせか)を選択できる。
一方、AutoCompleteSourceプロパティにはオートコンプリート機能のソースとなる参照先をAutoCompleteSource列挙体(System.Windows.Forms名前空間)の値で指定する。これにより補完候補としてURLの履歴や、ファイルシステムなどを指定できる。
AutoCompleteSourceプロパティにAutoCompleteSource.CustomSourceを設定して、独自の補完候補を利用することも可能だが、これについては「TIPS:オートコンプリート機能で独自の補完候補を使用するには?」で解説している。
例えば次の画面は、「AutoCompleteMode.Suggest」と「AutoCompleteSource.AllUrl」を設定した場合に表示される補完候補の一覧の例である。この設定はIEのアドレス・バーとほぼ同じ仕様である。
AutoCompleteSource. AllUrl指定時のオートコンプリート |
URLの履歴をソースとして設定した場合、「http://〜」と入力する以外にも、(IEのアドレス・バーと同様に)「http://www.xxx〜」のxxxの部分を入力しただけでもURLの補完候補が表示される。 |
また、次の例は「AutoCompleteMode.Suggest」と「AutoCompleteSource. AllSystemSources」を指定した場合だ。これはエクスプローラのアドレス・バーとほぼ同じ仕様となる。つまりURLやディレクトリ、ファイルが補完候補となる。
AutoCompleteSource. AllSystemSources指定時のオートコンプリート |
「c:\Program Files\mi」と入力すると、c:\Program Filesディレクトリにある「mi」で始まるディレクトリ名の一覧が補完候補として表示される。 |
オートコンプリート機能確認用のサンプル・プログラム
最後に本稿で使用しているサンプル・プログラムについて解説しておく。
このサンプル・プログラムを作成するには、Visual Studio 2005でWindowsアプリケーションのプロジェクトを新規作成し、フォームに2つのComboBoxコントロールと1つのTextBoxコントロール、文字列表示用のLabelコントロールを以下のように配置する。
サンプル・プログラムのフォーム |
2つのComboBoxコントロールと1つのTextBoxコントロール、文字列表示用のLabelコントロールを配置する。 |
次に、フォームをダブルクリックして、Loadイベント・ハンドラに以下のようなコードを記述する。
| ||
Loadイベント・ハンドラに記述するコード(上:C#、下:VB) |
ここでは、各ComboBoxコントロールでAutoCompleteModeおよびAutoCompleteSource列挙体のすべての値を一覧できるように、コントロールのデータソースとしてEnum.GetValuesメソッドにより取得したコレクションを設定している(Enum.GetValuesメソッドに関しては「TIPS:列挙体の値を列挙するには?」を参照してほしい)。
続いては、上側のComboBoxコントロールをダブルクリックして、以下のコードを記述する。このイベント・ハンドラはコンボボックスで選択されている項目が変更されたときに呼び出されるものだ。
| ||
上側ComboBoxコントロールのSelectedIndexChangedイベント・ハンドラに記述するコード(上:C#、下:VB) |
ここでは新しく選択された値(これはAutoCompleteMode列挙体の値である)を取り出し、それをTextBoxコントロールのAutoCompleteModeプロパティに設定する。
同様に、下側のComboBoxコントロールをダブルクリックして、以下のコードを入力する。
| ||
下側ComboBoxコントロールのSelectedIndexChangedイベント・ハンドラに記述するコード(上:C#、下:VB) |
AutoCompleteSource.ListItemsが選択された場合には今回のプログラムでは例外が発生してしまうが、ここではそれを無視するようにしている。以上で、サンプル・プログラムは完成である。
ちなみに、オートコンプリート機能はWin32 APIのSHAutoComplete関数を使用して実装されているようである。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:TextBoxコントロール 使用ライブラリ:TextBoxコントロール(System.Windows.Forms名前空間) 使用ライブラリ:AutoCompleteMode列挙体(System.Windows.Forms名前空間) 使用ライブラリ:AutoCompleteSource列挙体(System.Windows.Forms名前空間) 関連TIPS:オートコンプリート機能で独自の補完候補を使用するには? 関連TIPS:列挙体の値を列挙するには? |
「.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|