Textbox 的自動完成 (AutoComplete)

AutoComplete

Textbox 可以設定自動完成使用者輸入的文字。

Textbox的屬性設定

要讓Textbox有自動完成的功能,必須指定AutoCompleteSource屬性,預設為None,也就是不使用,總共有7種來源可選。如果資料來源要由自己提供,例如從資料庫取得的資料,就必須指定為CustomSource。

並且同時要指定AutoCompleteMode屬性,這是自動完成的表現方式,預設為None,表示沒有任何形式的提示,也就是自動完成有動作,但沒告知使用者,看起來沒有任何自動完成的效果。可用的屬性稍後介紹。

最後只要告訴Textbox可用的資料有哪些,就可讓它幫你達成自動完成的動作。把資料設定在AutoCompleteCustomSource屬性,依照指示一筆資料一行。

2. AutoCompleteMode屬性

可用的屬性有3種:
  • Suggest:只提供建議。文字框下會列出可選的資料,但不會自動幫你填在文字框中。如下圖。
  • Append:直接附加可用的資料。不會提供建議的資料清單,當你輸入第一個字元時,自動幫你把找到相符的第一筆資料附加在你輸入的字元之後,並反白顯示,當你輸入第2個字元時,繼續幫你找到相符的資料做附加,持續下去。如下圖1為輸入第1個字元時的提示資料,圖2為輸入第2個字元時提示的資料。
  • SuggestAppend:綜合以上2種效果,既顯示資料清單也自動幫你附加第一筆文字。

以程式碼方式達成

以上的說明,全都在設計階段就可完成。當然也可以程式碼方式來達到同樣效果,如果資料必須從資料庫載入的話也是必須這麼做。
private void initAutoCompleteTextBox()
 {
     AutoCompleteStringCollection autoData = new AutoCompleteStringCollection();
     autoData.Add("Apple");
     autoData.Add("Banana");
     autoData.Add("Blackberry");
     autoData.Add("Blueberry");
     autoData.Add("Lemon");
     autoData.Add("Mango");
     autoData.Add("Orange");
     autoData.Add("Pineapple");
     autoData.Add("Strawberry");

     txtAuto.AutoCompleteSource = AutoCompleteSource.CustomSource;
     txtAuto.AutoCompleteMode = AutoCompleteMode.Suggest;
     txtAuto.AutoCompleteCustomSource = autoData;
 }
資料使用AutoCompleteStringCollection類別來加入,之後再指定給Textbox就可以了。
本文網址:https://blog.tonycube.com/2011/09/textbox.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

2 則留言

  1. 大大好,請問輸入文字後只會找前幾個字,可以改成找關鍵字?
    依照你的案例可以輸入berry跳出Blackberry / Blueberry / Strawberry嗎?
    感恩..

    回覆刪除
    回覆
    1. 內建的 Textbox 沒有提供這個功能,可能要繼承它然後改寫判斷機制
      http://stackoverflow.com/questions/26979900/how-can-i-get-c-sharp-textbox-autocomplete-to-make-suggestions-based-on-contains

      刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。