实现Textbox+listBoxControl拼音检索 C#

来源:互联网 发布:金百福珠宝软件试用版 编辑:程序博客网 时间:2024/06/05 14:22

在很多程序中,我们都需要用到Textbox拼音检索,在此我用TextBox和ListBox组合示例实现其拼音检索。

试验中我们实现了以下样式效果:

实现代码:

1、//添加textbox的TextChange事件

 private void textEdit1_TextChanged(object sender, EventArgs e)

{

}

2、我们可以将所要检索的信息存储在ArrayList中,例如上图中的道路信息(可以直接在数据库中读取dataTable后构建ArrayList,也可以通过遍历ListBox中的Items构建ArrayList中),此Arraylist将在下面的检索中用到。

3、利用下面两个函数,获得String字符的拼音组合。

 

 /// <summary>       /// 拼音检索       /// </summary>       /// <param name="strText"></param>       /// <returns></returns>       static public string GetChineseSpell(string strText)       {           int len = strText.Length;           string myStr = "";           for (int i = 0; i < len; i++)           {               myStr += getSpell(strText.Substring(i, 1));}           return myStr;       }       /// <summary>       /// 得到首字母       /// </summary>       /// <param name="cnChar"></param>       /// <returns></returns>       static public string getSpell(string cnChar)       {           byte[] arrCN = Encoding.Default.GetBytes(cnChar);           if (arrCN.Length > 1)           {               int area = (short)arrCN[0];               int pos = (short)arrCN[1];               int code = (area << 8) + pos;               int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };               for (int i = 0; i < 26; i++)               {                   int max = 55290;                   if (i != 25) max = areacode[i + 1];                   if (areacode[i] <= code && code < max)                   {                       return Encoding.Default.GetString(new byte[] { (byte)(65 + i) });               }               }               return "";           }           else               return cnChar;}}

3、在TextBox的TextChanged事件中添加以下类似检索代码:

  

 private void textEdit1_TextChanged(object sender, EventArgs e)       {           this.listBoxControlStaValue.Items.Clear();               System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^a-zA-Z\r\n]+");           if (!reg.Match(textEdit1.Text.ToString()).Success)           {               //遍历ArrayList中的所有道路信息foreach (object o in m_list)               {//获得道路名称各汉字拼音首字母缩写string strRoadName = GetChineseSpell(o.ToString()).ToLower();                   string strtxtRoadName = textEdit1.Text.ToLower();       //根据拼音进行匹配(利用Contain和Substring函数进行判定)            if (strRoadName.Contains(strtxtRoadName)&&strRoadName.Substring(0, strtxtRoadName.Length ) == strtxtRoadName)               {                         listBoxControlStaValue.Items.Add(o);                       }               }           }           else           {       //当TextBox为空时显示所有数据        ShowRouteName();           }       }

0 0
原创粉丝点击