<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      可以搜索的ComboBox----

      [摘要]在.Net的技術論壇里,有一次看到了某網友發了個帖子,大概的意思就是:假如數據庫中有很多的記錄讀取到ComboBox中,恰好是大于1000條記錄,如果要選擇其中第500條記錄,那不得煩死了啊?所以,...
      在.Net的技術論壇里,有一次看到了某網友發了個帖子,大概的意思就是:假如數據庫中有很多的記錄讀取到ComboBox中,恰好是大于1000條記錄,如果要選擇其中第500條記錄,那不得煩死了啊?所以,最好是輸入代碼或者其他的助記符號就馬上可以找到那條記錄.

      為此,我作了一個控件SearchComboBox.由于本人表達能力有限,不怎么好,就直接開始程序了

      首先,建立一個項目Hexudong_ComboBox

      然后添加一個類ItemName,具體代碼如下

      ItemName.cs

      using System;

      namespace Hexudong_ComboBox
      {
      /// <summary>
      /// ItemName 的摘要說明。
      /// </summary>
      public class ItemName:object
      {
      private long _ID;
      private string _Code;
      private string _Name;
      private string _PinYinCode;
      private string _WuBiCode;
      private string _DefineCode;
      private string _Text;

      public ItemName()
      {
      //
      // TODO: 在此處添加構造函數邏輯
      //
      }

      public ItemName(long id,string code,string name)
      {
      _ID=id;
      _Code=code;
      _Name=name;
      _Text=_Code + " " + _Name;
      }

      public ItemName(long id,string code,string name,string pinyincode,string wubicode)
      {
      _ID=id;
      _Code=code;
      _Name=name;
      _PinYinCode=pinyincode;
      _WuBiCode=wubicode;
      _Text=_Code + " " + _Name;
      }

      public ItemName(long id,string code,string name,string pinyincode,string wubicode,string definecode)
      {
      _ID=id;
      _Code=code;
      _Name=name;
      _PinYinCode=pinyincode;
      _WuBiCode=wubicode;
      _DefineCode=definecode;
      _Text=_Code + " " + _Name;
      }

      /// <summary>
      /// ID號
      /// </summary>
      public long ID
      {
      get
      {
      return _ID;
      }
      set
      {
      _ID=value;
      }
      }

      /// <summary>
      /// 代碼
      /// </summary>
      public string Code
      {
      get
      {
      return _Code;
      }
      set
      {
      _Code=value;
      }
      }

      /// <summary>
      /// 名稱
      /// </summary>
      public string Name
      {
      get
      {
      return _Name;
      }
      set
      {
      _Name=value;
      }
      }

      /// <summary>
      /// 拼音碼
      /// </summary>
      public string PinYinCode
      {
      get
      {
      return _PinYinCode;
      }
      set
      {
      _PinYinCode=value;
      }
      }

      /// <summary>
      /// 五筆碼
      /// </summary>
      public string WuBiCode
      {
      get
      {
      return _WuBiCode;
      }
      set
      {
      _WuBiCode=value;
      }
      }

      /// <summary>
      /// 自定義碼
      /// </summary>
      public string DefineCode
      {
      get
      {
      return _DefineCode;
      }
      set
      {
      _DefineCode=value;
      }
      }

      /// <summary>
      /// 控件文本
      /// </summary>
      public string Text
      {
      get
      {
      return _Text;
      }
      set
      {
      _Text = value;
      }
      }

      /// <summary>
      /// 重寫ToString方法
      /// </summary>
      /// <returns></returns>
      public override string ToString()
      {
      return _Text;
      }
      }
      }


      再添加一個類SearchComboBox,具體的代碼如下:

      SearchComboBox.cs

      using System;
      using System.Windows.Forms;
      using System.Drawing;

      namespace Hexudong_ComboBox
      {
      /// <summary>
      /// SearchCombBox 的摘要說明。
      /// </summary>
      public class SearchComboBox:System.Windows.Forms.ComboBox
      {
      public SearchComboBox()
      {
      //
      // TODO: 在此處添加構造函數邏輯
      //
      DrawMode = DrawMode.OwnerDrawFixed;
      }

      //根據輸入文本框內容的Code查找相應的名稱值并顯示為代碼+名稱的字符串
      protected override void OnKeyPress(KeyPressEventArgs e)
      {
      if(e.KeyChar==(char)13)
      {
      foreach(object obj in Items)
      {
      ItemName item=(ItemName)obj;
      if(item.Code.Trim()==Text.Trim())
      {
      SelectedItem=item;
      Text=item.Code + " " + item.Name;
      break;
      }
      }
      }
      base.OnKeyPress (e);
      }

      //失去焦點
      protected override void OnLostFocus(EventArgs e)
      {
      GetText(false);
      base.OnLostFocus (e);
      }

      //得到焦點
      protected override void OnGotFocus(EventArgs e)
      {
      GetText(true);
      base.OnGotFocus (e);
      }

      //選擇項改變
      protected override void OnSelectedIndexChanged(EventArgs e)
      {
      GetText(true);
      base.OnSelectedIndexChanged (e);
      }

      /// <summary>
      /// 失去焦點,得到焦點,選擇變化時的文本內容
      /// </summary>
      /// <param name="Focused">是否聚焦,主要區別于OnLostFocus事件</param>
      /// <returns></returns>
      private string GetText(bool Focused)
      {
      if(SelectedItem!=null)
      {
      ItemName item=(ItemName)SelectedItem;
      if(Focused)
      {
      Text=item.Code + " " + item.Name;
      SelectAll();
      }
      else
      {
      Text=item.Name;
      }
      }
      else
      {
      Text="";
      }
      return Text;
      }

      //重畫下拉子項的內容,主要是賦文本內容
      protected override void OnDrawItem(DrawItemEventArgs e)
      {
      e.DrawBackground();
      e.DrawFocusRectangle();

      if (e.Index < 0)
      e.Graphics.DrawString("", e.Font,
      new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y);
      else
      {
      if (Items[e.Index].GetType() == typeof(ItemName))
      {
      ItemName item = (ItemName)Items[e.Index];
      e.Graphics.DrawString(item.Text ,
      e.Font,new SolidBrush(e.ForeColor),e.Bounds.X,e.Bounds.Y);
      }
      else
      {
      e.Graphics.DrawString("",
      e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y);

      }
      }
      base.OnDrawItem (e);
      }

      /// <summary>
      /// 設置或獲取選擇項的ID號
      /// </summary>
      public long SelectedID
      {
      get
      {
      if(SelectedItem!=null)
      {
      ItemName item=(ItemName)SelectedItem;
      return item.ID;
      }
      else
      {
      return -1;
      }
      }
      set
      {
      int i=0;
      foreach(object obj in Items)
      {
      ItemName item=(ItemName)obj;
      if(item.ID==value)
      {
      SelectedItem=item;
      Text=item.Code + " " + item.Name;
      break;
      }
      if(i==Items.Count-1)
      {
      SelectedItem=null;
      Text="";
      }
      i++;
      }
      }
      }

      /// <summary>
      /// 設置或獲取選擇項的代碼
      /// </summary>
      public string SelectedCode
      {
      get
      {
      if(SelectedItem!=null)
      {
      ItemName item=(ItemName)SelectedItem;
      return item.Code;
      }
      else
      {
      return "";
      }
      }
      set
      {
      int i=0;
      foreach(object obj in Items)
      {
      ItemName item=(ItemName)obj;
      if(item.Code.Trim()==value.Trim())
      {
      SelectedItem=item;
      Text=item.Code + " " + item.Name;
      break;
      }
      if(i==Items.Count-1)
      {
      SelectedItem=null;
      }
      i++;
      }
      }
      }

      /// <summary>
      /// 設置或獲取選擇項的名稱
      /// </summary>
      public string SelectedName
      {
      get
      {
      if(SelectedItem!=null)
      {
      ItemName item=(ItemName)SelectedItem;
      return item.Name;
      }
      else
      {
      return "";
      }
      }
      set
      {
      int i=0;
      foreach(object obj in Items)
      {
      ItemName item=(ItemName)obj;
      if(item.Name.Trim()==value.Trim())
      {
      SelectedItem=item;
      Text=item.Code + " " + item.Name;
      break;
      }
      if(i==Items.Count-1)
      {
      SelectedItem=null;
      }
      i++;
      }
      }
      }
      }
      }


      最后,編譯成類庫Hexudong_ComboBox.dll

      下面來測試一下剛作的Hexudong_ComboBox.dll

      另外建立一個測試的項目,然后把這個Hexudong_ComboBox.dll添加到工具箱中

      拖一個到測試界面Form1上,然后,就可以在代碼中添加數據到SearchComboBox中

      Form1.cs中的部分代碼

      .........

      using Hexudong_ComboBox;

      .........



      private void Form1_Load(object sender, System.EventArgs e)
      {
      this.searchComboBox1.Items.Clear();
      Users objUsers=new UsersS().GetUsers();
      foreach(User objUser in objUsers)
      {
      this.searchComboBox1.Items.Add(new ItemName(objUser.ID,objUser.Code,objUser.Name));
      }

      ........

      聚焦的時候是這樣的:



      失焦的時候是這樣的:



      如果你輸入003,然后敲回車,那么會出現



      好了,實現了功能,結束了

      當然,本人還是在學習階段,或許上面的代碼寫的不怎么好,希望指正.有些功能還不夠強,請擴


      日韩精品一区二区三区高清