C# WinForm TextBox猜想輸入和歷史記錄輸入(源碼)
什么是猜想輸入
當我們在使用查詢應用時,輸入某個關鍵字后文本框下面就會自動彈出跟此關鍵字相附的詞組供我們選擇,為我們節省了輸入的時間,這就是猜想輸入,例如:百度,谷歌,等等,如下圖:

如上圖所示,使用WinForm的TextBox實現了這樣的效果,主要借助于TextBox的AutoCompleteMode和AutoCompleteSource以及AutoCompleteCustomSource屬性。
詳細參數
AutoCompleteMode
獲取或設置控制自動完成如何作用于TextBox的選項。
屬性值
Append 將最可能的候選字符串的其余部分追加到現有的字符,并突出顯示追加的字符。
Suggest 顯示與編輯控件關聯的輔助下拉列表。 此下拉列表填充了一個或多個建議完成字符串。
SuggestAppend 追加 Suggest 和 Append 選項。
None 禁用自動完成 這是默認值。
AutoCompleteSource 獲取或設置一個值,該值指定用于自動完成的完整字符串的源。
AutoCompleteCustomSource 獲取或設置在 AutoCompleteSource 屬性設置為 CustomSource 時使用的自定義 System.Collections.Specialized.StringCollection。
如下圖:

代碼設計
TextBoxRemind
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();
}
}
}
最后
大家經常遇到使用StreamReader和StreamWriter時中文不能正常顯示,一個簡單的方法就是將Encoding設置為Default即可。
附

浙公網安備 33010602011771號