什麼是聯想輸入
當我們在使用查詢時,輸入某個關鍵字後,下面就會自動彈出跟此相關的字詞讓我們選擇,可以節省輸入的時間,這就是聯想輸入。例如:google、百度等等。
如下圖
如上圖所示,使用WinForm的TextBox 實現這個效果,主要是用TextBox的AutoCompleteMode、AutoCompleteSource和AutoCompleteCustomSource屬性
-----------------------------------------------------------------------------------------------------------------------------
AutoCompleteMode 獲取或設置自動完成如何作用於TextBox的選項
屬性
Append 將最可能的候選字符串的其餘部分追加到現有的字符,並突出顯示追加的字符。
Suggest 顯示與編輯控件關聯的輔助下拉列表。此下拉列表填充了一個或多個建議完成字符串。
SuggestAppend 追加 Suggest 和 Append 選項。
None 禁用自動完成 這是默認值。
AutoCompleteSource 獲取或設置一個值,該值指定用於自動完成的完整字符串的源。
AutoCompleteCustomSource 獲取或設置在AutoCompleteSource 屬性設置為CustomSource 時使用的自定義System.Collections.Specialized.StringCollection。
如下圖:
程式碼:
public
class
TextBoxRemind
{
private
string
[] array =
null
;
public
void
InitAutoCompleteCustomSource(TextBox textBox)
{
array = ReadTxt();
if
(array !=
null
&& array.Length > 0)
{
AutoCompleteStringCollection ACSC =
new
AutoCompleteStringCollection();
for
(
int
i = 0; i < array.Length; i++)
{
ACSC.Add(array[i]);
}
textBox.AutoCompleteCustomSource = ACSC;
}
}
string
[] ReadTxt()
{
try
{
if
(!File.Exists(
"Remind.txt"
))
{
FileStream fs =
File.Create(
"Remind.txt"
);
fs.Close();
fs =
null
;
}
return
File.ReadAllLines(
"Remind.txt"
, Encoding.Default);
}
catch
{
return
null
;
}
}
public
void
Remind(
string
str)
{
StreamWriter writer =
null
;
try
{
if
(array !=
null
&& !array.Contains(str))
{
writer =
new
StreamWriter(
"Remind.txt"
,
true
, Encoding.Default);
writer.WriteLine(str);
}
}
finally
{
if
(writer !=
null
)
{
writer.Close();
writer =
null
;
}
}
}
}
歷史紀錄
由於存儲的都是文本數據,所以採用了文本文檔進行存儲,輕量級操作方便,系統會自動創建Remind.txt文件。
讀取視窗時首先初始化InitAutoCompleteCustomSource,加入AutoCompleteStringCollection,當我們點擊確認後重新初始化數據源,載入之前存的關鍵字。
public
partial
class
Form1 : Form
{
private
TextBoxRemind remind =
null
;
public
Form1()
{
InitializeComponent();
remind =
new
TextBoxRemind();
InitTextBoxRemind();
}
void
InitTextBoxRemind()
{
remind.InitAutoCompleteCustomSource(textBox1);
}
private
void
button1_Click(
object
sender, EventArgs e)
{
if
(textBox1.Text.Trim() !=
""
)
{
remind.Remind(textBox1.Text.Trim());
InitTextBoxRemind();
}
}
}