我的上一个支持拼音检索的TextBox扩展控件,由于有些网友留言和发邮件问如何用,

如:菜鸟AAA等当时想到肯定大家都会用,就没上传示例程序。

原文为:http://www.cnblogs.com/whitewolf/archive/2009/12/03/1615975.html#1717373

既然有人问,那就上传下是下程序。肯定很多人都知道如何用,请越过就是,不要发弁言。

主要只有三个属性暴露出来:

1MaxItemCout:这是在多个下拉条时,显示多少条可见;

2SearchMode:检索方式:只提供了SearchMode.Contains SearchMode.StartWith包含和以其开始区别;

3:SpellSearchSource:检索的数据源,仅显现的中文等字符;

主要在它上:有几种方式设计:

1:设计时:

2:代码中;
一般的:

  1. //一般的CODE为;  
  2.             spellSearchBoxEx1.SpellSearchSource = new string[] { "中国""中国fgdfs""中阿收费的肌肤""男生""女生" };  
  3.  
  4.  

3:数据库情况下,本实例用的是随机生成中文模拟数据库情况;

  1. public partial class Form1 : Form  
  2.     {  
  3.         public Form1()  
  4.         {  
  5.             InitializeComponent();  
  6.         }  
  7.  
  8.         private void Form1_Load(object sender, EventArgs e)  
  9.         {  
  10.              
  11.             //一般的CODE为;  
  12.             spellSearchBoxEx1.SpellSearchSource = new string[] { "中国""中国fgdfs""中阿收费的肌肤""男生""女生" };  
  13.  
  14.             // 连接数据库情况下仅此;  
  15.             spellSearchBoxExBySql.SpellSearchSource = GetSpellBoxSource(GetDataTable());  
  16.         }  
  17.  
  18.         public string[] GetSpellBoxSource(DataTable dt)  
  19.         {  
  20.             List<string> list = new List<string>();  
  21.             foreach (DataRow dr in dt.Rows)  
  22.             {  
  23.                 if (!Convert.IsDBNull(dr["Text"]))  
  24.                     list.Add(dr["Text"].ToString());  
  25.             }  
  26.             return list.ToArray();  
  27.         }  
  28.         public DataTable GetDataTable()  
  29.         {  
  30.             //这里是自己的代码连接数据库仅得到要填的列;  
  31.             //本方法没连数据库,用随机生成中文模拟获得DatatTable  
  32.             // DataTable dt = DB.GetDatatable("sql");  
  33.             DataTable dt = new DataTable();  
  34.             dt.Columns.Add(new DataColumn("Text", typeof(string)));  
  35.             Random rn = new Random();  
  36.             for (int i = 0; i < 50; i++)  
  37.             {  
  38.                 string str ="中" +GetRandomChinese(rn.Next(8));  
  39.                 DataRow dr = dt.NewRow();  
  40.                 dr["Text"] = str;  
  41.                 dt.Rows.Add(dr);  
  42.             }  
  43.             return dt;  
  44.         }  
  45.  
  46.         #region 以下只是随机生成中文,与本控件使用无关;  
  47.         public string GetRandomChinese(int strlength)  
  48.         {  
  49.             Encoding gb = Encoding.GetEncoding("gb2312");  
  50.  
  51.             object[] bytes = this.CreateRegionCode(strlength);  
  52.  
  53.             StringBuilder sb = new StringBuilder();  
  54.  
  55.             for (int i = 0; i < strlength; i++)  
  56.             {  
  57.                 string temp = gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));  
  58.                 sb.Append(temp);  
  59.             }  
  60.  
  61.             return sb.ToString();  
  62.         }  
  63.         private object[] CreateRegionCode(int strlength)  
  64.         {  
  65.             //定义一个字符串数组储存汉字编码的组成元素   
  66.             string[] rBase = new String[16] { "0""1""2""3""4""5""6""7""8""9""a""b""c""d""e""f" };  
  67.  
  68.             Random rnd = new Random();  
  69.             object[] bytes = new object[strlength];  
  70.             for (int i = 0; i < strlength; i++)  
  71.             {  
  72.                 int r1 = rnd.Next(11, 14);  
  73.                 string str_r1 = rBase[r1].Trim();  
  74.                 rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);  
  75.                 int r2;  
  76.                 if (r1 == 13)  
  77.                 {  
  78.                     r2 = rnd.Next(0, 7);  
  79.                 }  
  80.                 else 
  81.                 {  
  82.                     r2 = rnd.Next(0, 16);  
  83.                 }  
  84.                 string str_r2 = rBase[r2].Trim();  
  85.                 rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);  
  86.                 int r3 = rnd.Next(10, 16);  
  87.                 string str_r3 = rBase[r3].Trim();  
  88.                 rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);  
  89.                 int r4;  
  90.                 if (r3 == 10)  
  91.                 {  
  92.                     r4 = rnd.Next(1, 16);  
  93.                 }  
  94.                 else if (r3 == 15)  
  95.                 {  
  96.                     r4 = rnd.Next(0, 15);  
  97.                 }  
  98.                 else 
  99.                 {  
  100.                     r4 = rnd.Next(0, 16);  
  101.                 }  
  102.                 string str_r4 = rBase[r4].Trim();  
  103.                 byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);  
  104.                 byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);  
  105.                 byte[] str_r = new byte[] { byte1, byte2 };  
  106.                 bytes.SetValue(str_r, i);  
  107.             }  
  108.  
  109.             return bytes;  
  110.         }  
  111.         #endregion  
  112.