1. 程式人生 > >文字框(Textbox)和下拉框(Combobox)自動聯想功能的實現

文字框(Textbox)和下拉框(Combobox)自動聯想功能的實現

怎樣使自己程式中的文字框或下拉框具有像百度和Google那樣的自動聯想功能?微軟的TextBox和Combobox控制元件為我們提供了簡便方法。

首先需要學習TextBox(或Combobox)的兩個屬性,一個屬性是AutoCompleteMode,指定控制元件中使用的自動完成功能的模式,有四種模式,分別是:

None:禁用控制元件的自動完成功能                           

Suggest:顯示與編輯控制元件關聯的輔助下拉列表。此下拉列表填充了一個或多個建議完成字串。顯示效果如下: 

 

Append:將最可能的候選字串的其餘部分追加到現有的字元,並突出顯示追加的字元。顯示效果如下:

 

SuggestAppend:同時應用 Suggest 和 Append選項。顯示效果如下:

 

我們一般常用SuggestAppend模式。

另一個屬性為AutoCompleteSource,指定了控制元件實現自動聯想功能的資料來源,讀者可以自己去檢視MSDN,這裡就不再贅述。下面是一個程式碼示例:

首先設定TextBox和Combobox的AutoCompleteSource的屬性為CustomSource,然後設定TextBox和Combobox的AutoCompleteMode屬性為SuggestAppend。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using System.Data.Common;  
  9. namespace 文字框聯想功能的實現  
  10. {  
  11.     public partial class Form1 : Form  
  12.     {  
  13.         DataTable dt = new DataTable();  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.         privatevoid Form1_Load(object sender, EventArgs e)  
  19.         {  
  20.             InitialAutoCompleteList();  
  21.         }  
  22.         privatevoid InitialAutoCompleteList()  
  23.         {  
  24.             string []array=newstring[]{"hello","hi","nihao","hehe","yes","no","nobody","morning","yellow","moon"};  
  25.             DataColumn  dc=new DataColumn("name");  
  26.             this.dt.Columns.Add(dc);  
  27.             for (int i = 0; i < 10;i++ )  
  28.             {  
  29.                 DataRow dr = dt.NewRow();  
  30.                 dr[0] = array[i];  
  31.                 dt.Rows.Add(dr);  
  32.             }  
  33.             AutoCompleteStringCollection AutoCollection = new AutoCompleteStringCollection();  
  34.             foreach (DataRow dr in dt.Rows)  
  35.             {  
  36.                 AutoCollection.Add(dr["name"].ToString());  
  37.             }  
  38.             this.textBox_TestAutoComplete.AutoCompleteCustomSource = AutoCollection;  
  39.             this.comboBox_TestAutoComplete.AutoCompleteCustomSource = AutoCollection;  
  40.         }  
  41.     }