[C#][Windows Formsアプリ][ComboBox] 入力補完(オートコンプリート)を実現する

スポンサーリンク

はじめに

ComboBoxに文字を入力したとき、候補を自動で補完したり、ドロップダウンに候補を表示したりできるのが
オートコンプリート機能です。
この機能をコントロールしているのが、
AutoCompleteModeAutoCompleteSourceAutoCompleteCustomSource
の3つのプロパティです。

前提:
この記事は主に ComboBox を対象に説明しますが、TextBox など一部の他コントロールにも同じプロパティがあります。

 

3つのプロパティの役割

プロパティ 役割 主な例
AutoCompleteMode 補完の「出し方」を決める(サジェスト・補完方式) Suggest / Append / SuggestAppend
AutoCompleteSource 補完候補の「どこから取るか」を決める ListItems / CustomSource / FileSystem など
AutoCompleteCustomSource CustomSource 使用時の「独自候補リスト」を設定 AutoCompleteStringCollection で自由に候補定義

 

AutoCompleteModeプロパティ

候補をどのように表示・補完するかを指定します(列挙体 AutoCompleteMode)。

挙動
None オートコンプリートを無効にする(既定値)。
Suggest 入力欄の下に「候補一覧」をポップアップ表示(サジェスト)。
Append 入力した文字列に対して、補完候補を入力欄内に自動で補完。
SuggestAppend Suggest + Append の両方を行う(候補一覧 + 入力欄の補完)。
💡 実務では SuggestAppend を使うことが圧倒的に多いです。
「候補も見えるし、入力も楽」といういいとこ取り。

 

AutoCompleteSourceプロパティ

補完候補をどこから取ってくるかを指定するプロパティです(列挙体 AutoCompleteSource)。

説明 ComboBoxでよく使うか
None オートコンプリートを行わない。
ListItems ComboBox の Items コレクションを候補に使う。 ◎(最も使用頻度が高い)
CustomSource AutoCompleteCustomSource に設定したコレクションを候補に使う。 ◎(独自候補を使いたいとき)
FileSystem ファイルシステムのパスを候補にする。 △(TextBox向き)
HistoryList IEの履歴など OS / 環境依存の候補。 ✕(今はほぼ使わない)

ComboBox では基本的に ListItemsCustomSource を使うと覚えておいてOKです。

 

AutoCompleteCustomSourceプロパティ

AutoCompleteSourceCustomSource を選んだ場合に、
自分で用意した候補リストAutoCompleteStringCollection)を渡すプロパティです。

候補リストの作成例

var source = new AutoCompleteStringCollection();
source.AddRange(new[]
{
    "東京都千代田区",
    "東京都中央区",
    "東京都港区",
    "大阪市北区",
    "大阪市中央区"
});

comboBox1.AutoCompleteMode         = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource       = AutoCompleteSource.CustomSource;
comboBox1.AutoCompleteCustomSource = source;

このように設定すると、Items とは別に、候補専用のリストを持たせることができます。
「候補はたくさんあるけど、実際に選べる値は一部だけ」というときにも使えます。

 

ListItems を使う基本パターン(コンボボックス内の項目を候補に)

「コンボボックスに表示しているリストそのものを候補にしたい」場合の設定です。

comboBox1.Items.AddRange(new[]
{
    "Python",
    "C#",
    "Java",
    "JavaScript",
    "TypeScript"
});

// 入力補完の設定
comboBox1.AutoCompleteMode   = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

// DropDown / DropDownList どちらでも使用可能
comboBox1.DropDownStyle      = ComboBoxStyle.DropDown; // または DropDownList
📝 挙動の違い
DropDown:ユーザーが自由入力もできる。候補を参考にしつつ、リスト外の文字列も入力可能。
DropDownList:入力欄は編集不可だが、キー入力で候補選択がしやすくなる。

 

CustomSource を使う実用例

例:郵便番号の候補を出すが、ComboBoxのItemsには登録しない

var zipCandidates = new AutoCompleteStringCollection();
zipCandidates.AddRange(new[]
{
    "100-0001",
    "100-0002",
    "100-0003",
    "530-0001",
    "530-0002"
});

// ComboBox 側の表示値は別管理(例えば都道府県)
comboBoxZip.Items.AddRange(new[]
{
    "東京都",
    "大阪府",
    "愛知県"
});

comboBoxZip.AutoCompleteMode         = AutoCompleteMode.SuggestAppend;
comboBoxZip.AutoCompleteSource       = AutoCompleteSource.CustomSource;
comboBoxZip.AutoCompleteCustomSource = zipCandidates;

このように、「見せたい値」と「補完したい値」を分けることもできます。
ただし、UI 的には少しややこしくなるので、用途を絞って使うのがおすすめです。

 

よくある注意点とハマりポイント

  • AutoCompleteが動かない
    AutoCompleteModeNone になっていないか?
    AutoCompleteSourceNone のままになっていないか?
    CustomSource 選択時は AutoCompleteCustomSource が空でないか?
  • DropDownStyle = Simple のとき
    ・テキストボックス + リスト常時表示のスタイルのため、挙動がやや特殊。
    基本的には DropDownDropDownList で使うのが無難です。
  • 表示件数が多すぎる
    ・CustomSource に数千件以上入れると、サジェスト表示が重くなることがあります。
    → 件数を絞る・フィルタリングする・TextBox + 独自検索に切り替えるなどを検討。
  • 大文字小文字の扱い
    ・オートコンプリートは基本的に大文字小文字を区別せずにマッチします。

 

まとめ

  • AutoCompleteMode … 補完の出し方(Suggest / Append / SuggestAppend)を決める。
  • AutoCompleteSource … 候補の取得元(ListItems / CustomSource など)を決める。
  • AutoCompleteCustomSourceCustomSource 使用時の独自候補リスト(AutoCompleteStringCollection)。
  • コンボボックスでは ListItems + SuggestAppend が一番使いやすい定番設定。
  • 大量データや特殊な候補を扱うときは CustomSource の使いどころ。

これら3つのプロパティを組み合わせることで、入力が早く、ミスも減るコンボボックスを作ることができます。
まずは ListItems + SuggestAppend から試して、慣れてきたら CustomSource で独自候補にも挑戦してみてください。

Please follow and like us:

コメント

タイトルとURLをコピーしました