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即可。
附
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库