• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        可以搜索的ComboBox----

        可以搜索的ComboBox----

        更新時間:2022-04-28 文章作者:未知 信息來源:網絡 閱讀次數:

        在.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,然后敲回車,那么會出現



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

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

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 久久精品一区二区免费看| 国产天堂亚洲精品| 国产a级特黄的片子视频免费| 久久精品亚洲精品国产色婷 | 一级特黄a大片免费| mm1313亚洲国产精品美女| 在线精品自拍亚洲第一区| 啊v在线免费观看| 全部在线播放免费毛片| 亚洲色成人网站WWW永久| 免费av一区二区三区| 亚洲色图综合网站| 一个人看的www免费高清| 久久久久无码专区亚洲av| 伊人免费在线观看高清版| 亚洲AV成人片色在线观看高潮| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲午夜无码片在线观看影院猛| 免费一级毛片在线播放视频免费观看永久| 亚洲美女高清一区二区三区| 可以免费观看的毛片| 亚洲一区二区三区在线网站| 免费一看一级毛片| 精品视频在线免费观看| 亚洲一卡2卡3卡4卡国产网站 | 亚洲av无码专区在线观看下载| 亚洲欧洲日本在线| 91香蕉在线观看免费高清| 亚洲风情亚Aⅴ在线发布| 亚洲电影日韩精品| 亚洲视频在线免费播放| 亚洲AV无码久久| 大地资源免费更新在线播放| 免费观看又污又黄在线观看| 亚洲国产成人久久综合一| 免费网站看v片在线香蕉| 久久嫩草影院免费看夜色| 亚洲人xxx日本人18| 亚洲午夜久久久久久久久电影网| 亚洲高清视频免费| 久99久无码精品视频免费播放|