• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

在C#WinFormTextBox实现联想输入(suggest)和历史记录输入

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我想,现在已无法考证是谁先发明联想输入(suggest)这种很人性化的输入方式的,也无法说清林是C/S框架下先用,还是B/S框架中先用。我们也不用讨论前面这些问题,我只想说大家都知道联想输入指的什么吧?如果不明白,那百度或GOOGLE的搜索输入框就应用了这种输入技术,即你输入一个“js”,它可能会跟你联想出相关的词条来,比如:JS特效,js冲突等,当然,本文是在c# form中实现的联想输入外加历史输入,当然有人把联想输入称着suggest哟...算是跟你扩展点知识吧!下面我们就来具体讲解在c# form中实现的方案:
当我们在使用查询应用时,输入某个关键字后文本框下面就会自动弹出跟此关键字相附的词组供我们选择,为我们节省了输入的时间,这就是猜想输入,例如:百度,谷歌,等等,如下图:

如上图所示,使用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;
}
}
}
}

历史记录

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即可。附上源码,以便参考: [点击浏览该文件:TextBoxRemindTest.zip]


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中的类和继承发布时间:2022-07-10
下一篇:
C#如何获取鼠标在屏幕上的位置,不论程序是否为活动状态发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap