当前位置: 编程技术>.net/c#/asp.net
WinForm 自动完成控件实例代码简析
来源: 互联网 发布时间:2014-10-16
本文导语: 在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了。TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性: AutoCompleteCustomSource:AutoCompleteSource 属性设置为CustomSou...
在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了。
TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性:
AutoCompleteCustomSource:AutoCompleteSource 属性设置为CustomSource 时要使用的 StringCollection。
AutoCompleteMode:指示文本框的文本完成行为。
AutoCompleteSource:自动完成源,可以是 AutoCompleteSource 的枚举值之一。
就行了, 一个简单的示例如下
textBox1.AutoCompleteCustomSource .AddRange(new string[] { "java","javascript","js","c#","c","c++" });
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
可是这种方式的不支持我们中文的简拼自动完成(如在文本框里输入"gz"就会出现"广州")。只好自己写一个支持简拼自动完成的控件了。
这是效果图
控件不太复杂,一个TextBox和一个ListBox。代码方面,用DataTable作数据源,每次在TextBox的值时,通过DataTable的Select方法,配上合适的表达式(如:{0} like '{1}%' and IsNull([{2}], ' ') ' ')来筛选出合适的备选文本内容,以下则是控件的代码:
private TextBox _tb;
private ListBox _lb;
private DataTable _dt_datasource;
private bool _text_lock;
private string _general_text;//原始输入文本框的值
private bool _lb_kd_first_top;//listbox是否第一次到达顶部
private int _itemCount;
///
/// TextBox的Text属性,增加了_text_lock操作,放置触发TextChanged事件
///
private string TextBoxText
{
get { return _tb.Text; }
set
{
_text_lock = true;
_tb.Text = value;
_text_lock = false;
}
}
///
/// 显示在ListBox的字段名
///
public string ValueName { get; set; }
///
/// 用于匹配的字段名
///
public string CodeName { get; set; }
///
/// 显示提示项的数量
///
public int ItemCount
{
get
{ return _itemCount; }
set
{
if (value
WinForm实现移除控件某个事件的方法
c#实现DataGridView控件隔行变色(winform)的代码
WinForm DataGridView控件隔行变色的小例子
深入分析C#中WinForm控件之Dock顺序调整的详解
简介Winform中创建用户控件
WinForm的延时加载控件概述
WinForm子窗体访问父窗体控件的实现方法
WinForm自定义函数FindControl实现按名称查找控件
WinForm实现按名称递归查找控件的方法
C#中让控件全屏显示的实现代码(WinForm)
WinForm拖拽控件生成副本的解决方法
c#中多线程访问winform控件的若干问题小结
WinForm自定义控件应用实例
在多线程中调用winform窗体控件的实现方法
TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性:
AutoCompleteCustomSource:AutoCompleteSource 属性设置为CustomSource 时要使用的 StringCollection。
AutoCompleteMode:指示文本框的文本完成行为。
AutoCompleteSource:自动完成源,可以是 AutoCompleteSource 的枚举值之一。
就行了, 一个简单的示例如下
代码如下:
textBox1.AutoCompleteCustomSource .AddRange(new string[] { "java","javascript","js","c#","c","c++" });
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
可是这种方式的不支持我们中文的简拼自动完成(如在文本框里输入"gz"就会出现"广州")。只好自己写一个支持简拼自动完成的控件了。
这是效果图
控件不太复杂,一个TextBox和一个ListBox。代码方面,用DataTable作数据源,每次在TextBox的值时,通过DataTable的Select方法,配上合适的表达式(如:{0} like '{1}%' and IsNull([{2}], ' ') ' ')来筛选出合适的备选文本内容,以下则是控件的代码:
代码如下:
private TextBox _tb;
private ListBox _lb;
private DataTable _dt_datasource;
private bool _text_lock;
private string _general_text;//原始输入文本框的值
private bool _lb_kd_first_top;//listbox是否第一次到达顶部
private int _itemCount;
代码如下:
///
/// TextBox的Text属性,增加了_text_lock操作,放置触发TextChanged事件
///
private string TextBoxText
{
get { return _tb.Text; }
set
{
_text_lock = true;
_tb.Text = value;
_text_lock = false;
}
}
///
/// 显示在ListBox的字段名
///
public string ValueName { get; set; }
///
/// 用于匹配的字段名
///
public string CodeName { get; set; }
///
/// 显示提示项的数量
///
public int ItemCount
{
get
{ return _itemCount; }
set
{
if (value