html下拉控件 拼音检索和中文检索,Combobox控件实现汉字按拼音首字母检索

博客介绍了如何解决在使用ComboBox控件进行拼音检索时遇到的问题,包括输入内容不全显示和鼠标指针丢失。作者通过创建一个ComboBoxEx类并重写其方法,实现了拼音检索功能,并确保了输入内容的正确显示和鼠标指针的正常行为。
摘要由CSDN通过智能技术生成

Combobox控件在开发中作为下拉选项的不二之选,用的非常频繁,前几日开发过程中刚好有个需求有用到这个控件,而且客户要求增加下拉选择功能,这个简单,设置控件的自动完成属性后就解决了this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;//设置自动完成的源

this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;//设置自动完成的的形式

发现场让客户使用,客户表示功能实现和他需求不一致,后来解释是想通过下拉选项的拼音码进行检索,查遍的很多资料,也走了很多弯路,最后终于实现,将正确的实现方法记录在此

首先根据Combobox控件拼音码检索搜索到了这篇文章(http://www.cnblogs.com/eshizhan/archive/2012/08/13/2637207.html),集成到项目中进行测试时发现,输入检索的内容后,敲击回车键,输入的内容没有全部显示到文本框中,输入三个字母时,只显示一个或者两个,再次检索时候恢复正常

如果检索时,把鼠标指针从控件上移动到别的控件上,输入检索内容敲击回车键后,会出现丢失鼠标指针的情况,这时只有把鼠标往下移动到任务栏指针才会出现

以上问题测试均使用搜狗输入法中文状态

网上并没有找到针对这两个问题的解决方案,继续搜索拼音码检索,查找不同的方案,经过对多个方案的反复测试,终于发现了一个可用的方案,重写了ComboBox控件,以下为示例代码public class ComboBoxEx : System.Windows.Forms.ComboBox

{

public ComboBoxEx()

{

this.FormattingEnabled = true;

}

List _ChineseCharacterList;

private string[] _TextList;

public string[] TextList

{

get { return _TextList; }

set

{

_TextList = value;

_ChineseCharacterList = GetChineseCharacterList(value);

}

}

/// 

/// 把中文字符集合转为中文字符对象集合

/// 

private List GetChineseCharacterList(string[] chnTextList)

{

List lst = new List();

foreach (string s in chnTextList)

{

ChineseCharacter cc = new ChineseCharacter(s);

lst.Add(cc);

}

return lst;

}

protected override void OnTextUpdate(EventArgs e)

{

if (_ChineseCharacterList != null && _ChineseCharacterList.Count > 0)

{

//var input = this.Text.Trim().ToUpper();

string input = this.Text.Trim().ToUpper();

this.Items.Clear();

if (string.IsNullOrEmpty(input))

{

this.Items.AddRange(_ChineseCharacterList.ToArray());

}

else

{

var newList = _ChineseCharacterList.FindAll(c => c.FirstPinYin.Contains(input) || c.ChineseText.Contains(input));

if (newList.Count == 0)

{

newList.Add(new ChineseCharacter("未找到"));

}

this.Items.AddRange(newList.ToArray());

}

this.DisplayMember = "ChineseText";

this.ValueMember = "FirstPinYin";

this.Select(this.Text.Length, 0);

this.DroppedDown = true;

//保持鼠标指针形状

Cursor = Cursors.Default;

}

base.OnTextUpdate(e);

}

protected override void OnEnter(EventArgs e)

{

this.Items.AddRange(_ChineseCharacterList.ToArray());

this.DisplayMember = "ChineseText";

this.ValueMember = "FirstPinYin";

base.OnEnter(e);

}

protected override void OnLeave(EventArgs e)

{

this.Items.Clear();

base.OnLeave(e);

}

}

/// 

/// 中文字符

/// 

public class ChineseCharacter

{

public ChineseCharacter(string chnText)

{

ChineseText = chnText;

FirstPinYin =JHNISCommonLib.JHNISCommonManage.GetInstance().JianPin(chnText);

}

public string ChineseText { get; set; }

public string FirstPinYin { get; set; }

}

原文:http://254698001.blog.51cto.com/2521548/1864131

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值