C# 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即可。
附
【转自】http://www.cnblogs.com/zhaoblogs/archive/2011/12/07/2278938.html
C# TextBox猜想输入和历史记录输入的更多相关文章
- WinForm中TextBox 中判断扫描枪输入与键盘输入
本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html 提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBo ...
- 不让input表单的输入框保存用户输入的历史记录
如何不让input表单的输入框保存用户输入的历史记录. 有时我们在设计网页时不想让表单保存用户输入历史记录,比如一些隐私数据,或一些冲值卡 <input name="test&quo ...
- ASP.Net TextBox控件只允许输入数字
原文:ASP.Net TextBox控件只允许输入数字 1.1.在Asp.Net TextBox 控件的 OnKeyPress 事件中指定输入键盘码必须为数字: <asp:TextBox ID= ...
- input text 不显示输入的历史记录
当之前的text框输入了数据后,下次输入有历史记录问题的解决方法 怎么禁止输入框记录输入记录,双击input出现输入过的记录, 有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往 ...
- 【转】C#中判断扫描枪输入与键盘输入
提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...
- 转载:python原生态的输入窗口抖动+输入特效
python原生态的输入窗口抖动+输入特效 出处:https://coding.net/u/acee/p/PythonPowerInput/git/blob/master/test_power_inp ...
- c# 输入姓名直到输入的是quit时,停止输入然后显示出输入的姓名个数及姓名
1.输入姓名直到输入的是quit时(不区分大小写),停止输入然后显示出输入的姓名个数及姓名: 要求结果如下图所示: class Program { static void Main(string[] ...
- js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数——js小测:计算比赛得分
一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平均分: 最近在学习大数据可视化——图谱,用到js一些东西,所以今天就用js练练 用到知识点: js限制输入数字能输入小数点,js定义数组, ...
- 代码实现程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印
package com.loaderman.test; import java.util.Comparator; import java.util.Scanner; import java.util. ...
随机推荐
- 【ML】Two-Stream Convolutional Networks for Action Recognition in Videos
Two-Stream Convolutional Networks for Action Recognition in Videos & Towards Good Practices for ...
- JAVA程序设计 实验一报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1351 姓名:李畅宇 学号:20135129 成绩: 指导教师:娄嘉鹏 ...
- 《Linux内核分析》第五周笔记 扒开系统调用的三层皮(下)
扒开系统调用的三层皮(下) 一.给menuOS增加time和time-asm 通过内核调试系统调用.将上次做的实验加入到menusOS,变成menusOS里面的两个命令. 1 int Getpid(i ...
- Failed while installing JAX-RS (REST Web Services) 1.1. org.osgi.service.prefs.BackingStoreException: Resource '/.settings' does not exist.
https://issues.jboss.org/browse/JBIDE-10039?_sscc=t https://stackoverflow.com/questions/16836832/fai ...
- vuex的数据交互
methods:{ ...mapMutations({aaa:hs}) //将mutations的方法暴露出来,进行调用 aaa是他的名字 ...mapActions(['hs']) //将actio ...
- __add__运行过程
- 洛谷P3066 [USACO12DEC]逃跑的BarnRunning Away From…
题面链接 一句话题意:给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 我:似乎并不好做啊...看了题解后大雾... sol:考虑树上差分,对于一个点,在他那个位置++, ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)
为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...
- Spring事务说明与自实现
要使用Springboot的事务其实非常简单,在启动类上添加@EnableTransactionManagement,在Service的类或者方法上使用@Transactional就可以了. 事务本身 ...
- eclipse 代码模板
平常在借助eclipse进行开发时,有很多代码是重复的,这个时候我们可以利用eclipse自带的代码模板来进行快速输入,我们都知道,在eclipse中输入main,然后按下alt+/就会立马生成整个m ...