日期:2014-05-17  浏览次数:21094 次

求助 C#高手??汉语拼音 ··
我想用C#实现这样一个功能

  汉语拼音 索引
 
  假如我在我界面的组合框中输入 CS 就在我的 组合框中的下拉列表中添加并 展开下拉列表 所有的汉语拼音为CS打头的城市名 (在我的SQL数据库里面有的 我首先查找出来了 存在 ArrayList 中) 

  当我只输入一个 C 时就 添加并展开下拉列表 汉语拼音以 C 打头的所有城市 
 

  谢谢 高手了  
 最好写上注释 我是初学者 谢谢了 !!!

------解决方案--------------------
这个应该不是很难,楼主可以自己试试,无非是获取控件上按钮事件进行判断处理
------解决方案--------------------
1、在索引查询激活后,查询数据库内容(可以用like ‘cs%’)符合的前X0条记录,清除当前下拉列表内容,填充新数据
2、这里要考虑一个延迟问题,应该是键盘输入停顿300-500毫秒才激活。
------解决方案--------------------
把查询出的拼音结果放在字符串里。
然后循环判断 
if(str.indexOf("cs")!=-1)
如果不等于-1说明结果存在cs则把cs相关的值显示在下拉列表框里
------解决方案--------------------
麻烦呢

没有字库
或者你说的城市库
就有难度



你把你的数据库里的数据提取出来的时候
转换
把汉字转换为拼音到处都是
也可以只获取,声母的组合

要不就直接改数据库,在录入数据的时候,多加个拼音转换
直接存到数据库里



用datatable.select()

ArrayList 
存在ArrayList 里,用循环,遍历
加个临时的 ArrayList 
装你筛选后的数据


------解决方案--------------------
..你要这样查的话! 

最好是表里有个这样的字段 拼音码的字段!  

  或者就是查询出来后在去对对比。。。。
  然后返回 以C打头的
------ 11楼思路就可以!
ArrayList
存在ArrayList 里,用循环,遍历 
加个临时的 ArrayList
装你筛选后的数据 
-------

  

------解决方案--------------------
很早以前就做过这种功能,其实很简单,适用于地名,人名,商品名等,让查询更方便。

我的做法用一个字段存放名称的拼音首字母,这个字段的值在输入名称时就可以得到。省市地名可以有专门的字典,但人名,商品名只能通过计算。网上这样的类很多,输入中文字符串,得到拼音首字母的。最常见的是对一级汉字进行处理,用区位码可以判断首字母,二级汉字就不能用区位码判断了,只能通过类似于字典的方式。或者用微软最新的类库,Microsoft Visual Studio International Pack,其中包含更强大的功能,比如拼音,笔画,繁简转换等。
下载网址:http://www.microsoft.com/downloads/details.aspx?FamilyID=f9cfc884-1f00-45fa-b2fb-303d9e110bc7&displaylang=zh-cn

查询的时候就用Pinyin LIKE 'cs%'这种方式。如果数据量比较大,最好设置一个值,当用户输入的字符长度大于这个值才到数据库中查询。否则输入字母少的时候匹配项太多,改变一个字符就要刷新一次下拉列表项,速度会受影响。如果数据量比较小,比如省市也就几百条,可以先将所有数据查出来放在一个DataTable,List,Directory等中,然后根据输入再查出对应项。DataTable可以直接用SQL条件进行Select。List或者Directory等要把数据转换成对象,适合于面向对象的方式,VB可以用Like直接匹配字符串,C#可以用正则。如果用VS2008,则可以用Linq。以上方式供参考,根据需要选择适合的方式。

提示一个小技巧:加载ComboBox的项之前,调用ComboBox.BeginUpdate(),加载完成后调用ComboBox.EndUpdate()。当向列表添加大量的项时,使用这种方法添加项可以防止绘制 ComboBox 时闪烁。

另外也不要用ArrayList,装箱拆箱耗资源。尽量采用泛型,用System.Collections.Generic.List类替代ArrayList。如果只是字符串,可以用System.Collections.Specialized.StringCollection类。

你的程序是WinForm吧,应该比较容易。如果是Web,就要用Ajax实现,稍微麻烦一点。具体的代码就得靠你自己写,多实践一下就明白了。
------解决方案--------------------
这里有个中文取简写的类,http://blog.csdn.net/shmilylee/archive/2007/06/28/1670892.aspx供参考

在你的数据库中添加一个字段"简写",这个是最好的,在输入城市名称的时候就调用GetAbbreviation方法同时存进数据库

还有种办法就是遍历你的城市名称,调用GetAbbreviation方法(只在城市数据不多的情况下可为)
------解决方案--------------------
16楼给的那个类只能对一级汉字进行处理,但地名特别是县市级地名中经常会包含二级汉字。比如醴陵,得到的是zuoling,海参崴,得到的是haicanzuo,衢州和亳州得到的是zuozhou。我自己的类可以处理二级汉字,但无法处理多音字。建议还是用微软的吧,其中包含的功能更强。在输入的时候动态获取首字母并显示出来,让用户验证。如果是多音字,可以显示出候选项让用户挑选,这样就可以尽量避免多音字的问题。