.NET TIPS

オートコンプリート機能で独自の補完候補を使用するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2006/03/17

 「TIPS:テキストボックスでオートコンプリート機能を使用するには?」で解説しているように、.NET Framework 2.0のTextBoxコントロールやComboBoxコントロール(どちらもSystem.Windows.Forms名前空間)には、入力途中の内容を自動的に補完してくれるオートコンプリート機能が備わっている。

 入力内容にマッチさせる補完候補としては、URLの履歴やファイルシステムのディレクトリ名やファイル名などがあらかじめ用意されているが、完全に独自の候補リストを使用することも可能だ。本稿ではTextBoxコントロールで独自の補完候補を使用する方法について解説する。

独自の候補リストを使用するための設定

 TextBoxコントロールのオートコンプリート機能で独自の候補リストを使用するには、以下の3つの設定が必要となる。

AutoCompleteModeプロパティでオートコンプリート時の動作を決める。

AutoCompleteSourceプロパティを「AutoCompleteSource.CustomSource」に設定する。

AutoCompleteCustomSourceプロパティに補完候補となる文字列をセットする。

  で設定する候補リストの実体は、AutoCompleteStringCollectionクラス(System.Windows.Forms名前空間)のオブジェクトである。このクラスは文字列のコレクションであり、AddメソッドやAddRangeメソッドにより、補完候補となる文字列や文字列配列を追加できる。

 あるいは、独自にAutoCompleteStringCollectionクラスのインスタンスを作成してAutoCompleteCustomSourceプロパティにセットし、項目の追加や編集を行ってもよい。

 残念ながらAutoCompleteCustomSourceプロパティは、DataGridViewコントロールなどでおなじみのデータバインディング機能をサポートしていない。

独自の候補リストを使用したサンプル・プログラム

 次に独自の候補リストを使用したオートコンプリート機能のサンプル・プログラムを示す。

 このプログラムを実行するには、Visual Studio 2005でWindowsアプリケーションのプロジェクトを新規作成して、フォームにTextBoxコントロールとButtonコントロールを1つずつ配置し、TextBoxコントロールではAutoCompleteModeプロパティを「SuggestAppend」に、AutoCompleteSourceプロパティを「CustomSource」に設定する(上記 の設定)。

 次に、フォームのLoadイベント・ハンドラとボタンのClickイベント・ハンドラを作成して、以下のリストのようにコードを追加する。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    AutoCompleteStringCollection autoCompList;

    private void Form1_Load(object sender, EventArgs e) {
      autoCompList = new AutoCompleteStringCollection();
      textBox1.AutoCompleteCustomSource = autoCompList;

      // 候補リストに項目を追加(初期設定)
      autoCompList.AddRange(
        new string[] {
          "chandler", "joey", "monica", "phoebe", "ross","rachel",
        }
      );
    }

    private void button1_Click(object sender, EventArgs e) {
      // 候補リストに項目を追加
      string newItem = textBox1.Text.Trim();
      if (!String.IsNullOrEmpty(newItem)
          && !autoCompList.Contains(newItem)) {
        autoCompList.Add(newItem);
      }
    }
  }
}
Public Class Form1

  Dim autoCompList As AutoCompleteStringCollection

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    autoCompList = New AutoCompleteStringCollection()
    TextBox1.AutoCompleteCustomSource = autoCompList

    '候補リストに項目を追加(初期設定)
    autoCompList.AddRange(New String() _
      {"chandler", "joey", "monica", "phoebe", "ross", "rachel"})
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' 候補リストに項目を追加(初期設定)
    Dim newItem As String = TextBox1.Text.Trim()
    If Not String.IsNullOrEmpty(newItem) _
        And Not autoCompList.Contains(newItem) Then
      autoCompList.Add(newItem)
    End If
  End Sub
End Class
独自の候補リストを使用したオートコンプリート機能のサンプル・プログラム(上:C#、下:VB)

 以下に実行時の画面を示す。


上記サンプル・プログラムの実行画面の例

 このサンプル・プログラムでは、まずアプリケーションの起動時にいくつかの文字列を候補リストとして追加している。さらにボタンがクリックされたときには、テキストボックスに入力されている文字列を候補リストに追加する。

 サンプル・プログラムでは、すでに候補リスト内に存在する文字列は新たに追加しないようにしているが、リスト内に同一の項目が複数存在していても補完候補としては1つのみが表示されるようだ。

 ログイン画面のID入力用テキストボックスなどで、データベースから取得しておいたIDリストを候補リストとしてあらかじめ設定しておけば、ユーザーの使い勝手は向上するだろう(ただしセキュリティ面には配慮が必要となる)。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:TextBoxコントロール
使用ライブラリ:TextBoxコントロール(System.Windows.Forms名前空間)
使用ライブラリ:AutoCompleteMode列挙体(System.Windows.Forms名前空間)
使用ライブラリ:AutoCompleteSource列挙体(System.Windows.Forms名前空間)
使用ライブラリ:AutoCompleteStringCollectionクラス(System.Windows.Forms名前空間)
関連TIPS:テキストボックスでオートコンプリート機能を使用するには?

この記事と関連性の高い別の.NET TIPS
テキストボックスでオートコンプリート機能を使用するには?
[ASP.NET AJAX]ComboBoxコントロールの見栄えや挙動を設定するには?
[ASP.NET AJAX]AutoCompleteコントロールでGoogleサジェスト風なオートコンプリート機能を実装するには?
DataGridViewコントロールでオートコンプリート機能を使うには?
IntelliSense(インテリセンス)で隠れているコードを見るには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間