[登录]
[注册]
|
Visual Studio.NET
JavaScript
Java
C&C++
Flash & Flex
Database
Web
编程应用
编程工具
拼吾爱程序人生
»
软件编程
»
C#
»
支持拼音检索的TextBox扩展控件
支持拼音检索的TextBox扩展控件
[
1846
浏览 ][
手机版
]
返回列表
发布日期: 2009-12-03 发布者:
cobra
中文编程图书最低价热卖
English Programming Books
1
#
最近因项目中要用,于是就扩展了TextBox实现输入汉字首字母简单查询。控件扩展代码很简单。但是刚开始,一直没有找到扩展入口,始终无法展现下拉框。先想通过AutoCompleteCustomSource属性改变来实现,但最终没法扩展。后又想到ComboBox但是,也不好控制。经过一天的思考后决定用TextBox + ListBox组合扩展(主要为继承至TextBox和持有ListBo)。(文/
破浪
)
效果先上:
附件:
SpellSplit.jpg
最要实现代码有:
类原型
public class SpellSearchBoxEx : TextBox
{
private ListBox searchList;
.....
1:SpellSearchSource :查询数据源(汉字)
事件的绑定和选择全在属性里;
public string[] SpellSearchSource
{
get { return source; }
set
{
if (value != null)
{
source = value;
InitSourceSpell();//实现数据转化为相应拼音并存储;
TextChanged += new EventHandler(SpellSearchBoxEx_TextChanged);
LostFocus += new EventHandler(SpellSearchBoxEx_LostFocus);
// searchList是一个ListBox,它用来显示下拉框;
searchList.KeyDown += new KeyEventHandler(searchList_KeyDown);
searchList.Click += new EventHandler(searchList_Click);
searchList.MouseMove += new MouseEventHandler(searchList_MouseMove);
}
}
}
复制代码
2:TextChanged事件代码
protected virtual void SpellSearchBoxEx_TextChanged(object sender, EventArgs e)
{
searchList.Items.Clear();
string str = this.Text;
//输入的是汉字拼音情况;
foreach (string var in spellList)
{
if (SearchMode == SearchMode.Contains)
// SearchMode为枚举变量:StartsWith 和Contains
{
if (var.IndexOf(str.ToUpper()) != -1)
{
// spellList是先前存储转化拼音List<string>。
searchList.Items.Add(source[spellList.IndexOf(var)]);
}
}
else
{
if (var.ToUpper().StartsWith(str.ToUpper()))
{
searchList.Items.Add(source[spellList.IndexOf(var)]);
}
}
}
//输入的是汉字情况;
if (Regex.IsMatch(str, "[\u4e00-\u9fa5]+"))
{
foreach (string var in source)
{
if (SearchMode == SearchMode.Contains)
{
if (var.ToUpper().IndexOf(str.ToUpper()) != -1 && !searchList.Items.Contains(var))
{
searchList.Items.Add(var);
}
}
else
{
if (var.ToUpper().StartsWith(str.ToUpper())&& !searchList.Items.Contains(var))
{
searchList.Items.Add(var);
}
}
}
}
SetSearchBoxState();
}
复制代码
3:控制ListBox的显示和隐藏
private void SetSearchBoxState()
{
if (searchList.Items.Count > 0)
{
searchList.BorderStyle = BorderStyle.FixedSingle;
// maxItemCount为下拉框最大显示数;
searchList.Height = ((searchList.Items.Count >= maxItemCount ? maxItemCount : searchList.Items.Count) + 1) * searchList.ItemHeight;
searchList.Parent = this.Parent;
searchList.Location = new System.Drawing.Point(this.Left, this.Bottom);
searchList.Width = this.Width;
searchList.BringToFront();
searchList.Visible = true;
}
else
{
searchList.Visible = false;
}
}
复制代码
4:剩下的为:控制鼠标滑动和键盘方向键操作,很简单,主要利用ListBox的选中项为高亮显示;及在textBox LostFocus 并非ListBox获得焦点时隐藏结果控件ListBox
5:
ListBox上回车或者是点击时提交代码
protected virtual void CommitSearchList()
{
if (searchList.SelectedIndex > -1)
{
this.Text = searchList.Items[searchList.SelectedIndex].ToString();
searchList.Visible = false;
this.Focus();
}
}
复制代码
6:主体汉字检索拼音转化代码,请在下面下载,很简单,可以直接复制拿来用。
代码下载:
支持拼音检索的TextBox扩展控件
您可能对下面的文章也感兴趣(
返回头部
):
•
Essential C# 4.0, 3rd Edition
•
C#实现超逼真Windows扫雷程序
•
C# 实现 RDLC 自定义报表
•
C# Socket 实现的淘宝秒杀器(抢拍器)
•
WinForm界面开发之“OutLookBar”工具条
•
Programming C# 4.0, 6th Edition
•
C#实现的天气预报服务组件
•
Effective C# 中文版(改善程序的50种方法)PDF下载
•
C# 版的RPG地图编辑器
•
基于C#.NET Remoting技术的全球文字聊天室
•
C#开发的仿Windows扫雷小游戏
•
基于C#的网络爬虫程序
•
C# 高级编程(第四版)PDF及源码下载
•
Professional C# 4.0 and .NET 4
•
Effective C#: 50 Specific Ways to Improve Your C#, Second Edition (Covers C# 4.0)
•
利用wia和imgscan从扫描仪获取图像(vb6 c#)
TOP
返回列表
JavaScript
WCF
Web
Asp.Net
Visual Studio.NET
帖子标题
作者
我的资料
jQuery
ExtJS
Ajax
Android
JS压缩
Asp.Net
C#
Silverlight
WCF
WPF
WF
Linq
ADO.Net
F#
SQL Server
Oracle
MySQL
DB2
应用系统
框架设计
SEO编程
软件测试
程序人生
算法解析
HTML5