中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Combobox控件實現漢字按拼音首字母檢索

發布時間:2020-08-09 03:26:20 來源:網絡 閱讀:1850 作者:Misy 欄目:編程語言

Combobox控件在開發中作為下拉選項的不二之選,用的非常頻繁,前幾日開發過程中剛好有個需求有用到這個控件,而且客戶要求增加下拉選擇功能,這個簡單,設置控件的自動完成屬性后就解決了

this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;//設置自動完成的源 
this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;//設置自動完成的的形式

發現場讓客戶使用,客戶表示功能實現和他需求不一致,后來解釋是想通過下拉選項的拼音碼進行檢索,查遍的很多資料,也走了很多彎路,最后終于實現,將正確的實現方法記錄在此


首先根據Combobox控件拼音碼檢索搜索到了這篇文章(http://www.cnblogs.com/eshizhan/archive/2012/08/13/2637207.html),集成到項目中進行測試時發現,輸入檢索的內容后,敲擊回車鍵,輸入的內容沒有全部顯示到文本框中,輸入三個字母時,只顯示一個或者兩個,再次檢索時候恢復正常

如果檢索時,把鼠標指針從控件上移動到別的控件上,輸入檢索內容敲擊回車鍵后,會出現丟失鼠標指針的情況,這時只有把鼠標往下移動到任務欄指針才會出現

以上問題測試均使用搜狗輸入法中文狀態


網上并沒有找到針對這兩個問題的解決方案,繼續搜索拼音碼檢索,查找不同的方案,經過對多個方案的反復測試,終于發現了一個可用的方案,重寫了ComboBox控件,以下為示例代碼

    public class ComboBoxEx : System.Windows.Forms.ComboBox
    {
        public ComboBoxEx()
        {
            this.FormattingEnabled = true;
        }
        List<ChineseCharacter> _ChineseCharacterList;
        private string[] _TextList;
        public string[] TextList
        {
            get { return _TextList; }
            set
            {
                _TextList = value;
                _ChineseCharacterList = GetChineseCharacterList(value);
            }
        }
        /// <summary>
        /// 把中文字符集合轉為中文字符對象集合
        /// </summary>
        private List<ChineseCharacter> GetChineseCharacterList(string[] chnTextList)
        {
            List<ChineseCharacter> lst = new List<ChineseCharacter>();
            foreach (string s in chnTextList)
            {
                ChineseCharacter cc = new ChineseCharacter(s);
                lst.Add(cc);
            }
            return lst;
        }
        protected override void OnTextUpdate(EventArgs e)
        {
            if (_ChineseCharacterList != null && _ChineseCharacterList.Count > 0)
            {
                //var input = this.Text.Trim().ToUpper();
                string input = this.Text.Trim().ToUpper();
                this.Items.Clear();
                if (string.IsNullOrEmpty(input))
                {
                    this.Items.AddRange(_ChineseCharacterList.ToArray());
                }
                else
                {
                    var newList = _ChineseCharacterList.FindAll(c => c.FirstPinYin.Contains(input) || c.ChineseText.Contains(input));
                    if (newList.Count == 0)
                    {
                        newList.Add(new ChineseCharacter("未找到"));
                    }
                    this.Items.AddRange(newList.ToArray());
                }
                this.DisplayMember = "ChineseText";
                this.ValueMember = "FirstPinYin";
                this.Select(this.Text.Length, 0);
                this.DroppedDown = true;
                //保持鼠標指針形狀  
                Cursor = Cursors.Default;
            }
            base.OnTextUpdate(e);
        }
        protected override void OnEnter(EventArgs e)
        {
            this.Items.AddRange(_ChineseCharacterList.ToArray());
            this.DisplayMember = "ChineseText";
            this.ValueMember = "FirstPinYin";
            base.OnEnter(e);
        }
        protected override void OnLeave(EventArgs e)
        {
            this.Items.Clear();
            base.OnLeave(e);
        }
    }
    /// <summary>
    /// 中文字符
    /// </summary>
    public class ChineseCharacter
    {
        public ChineseCharacter(string chnText)
        {
            ChineseText = chnText;
            FirstPinYin =JHNISCommonLib.JHNISCommonManage.GetInstance().JianPin(chnText);
        }
        public string ChineseText { get; set; }
        public string FirstPinYin { get; set; }
    }


第二種方案,使用搜索輸入法輸入漢字,敲擊回車鍵后,輸入的內容沒有全部顯示到Combobox控件上,如下圖所示(輸入“瀏覽器”,只顯示了“覽器”):

Combobox控件實現漢字按拼音首字母檢索

經測試當把下拉列表顯示出來再進行檢索時,內容顯示正常,可通過以下代碼進行設置

        protected override void OnGotFocus(EventArgs e)
        {
            this.DroppedDown = true;
            base.OnGotFocus(e);
        }
        protected override void OnLostFocus(EventArgs e)
        {
            this.DroppedDown = false;
            base.OnLostFocus(e);
        }



第二種方案原文地址:http://download.csdn.net/detail/xbl002/9408842#comment

 

附件:http://down.51cto.com/data/2368281
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张家界市| 咸宁市| 临夏市| 青海省| 丹阳市| 二手房| 安图县| 泌阳县| 阜新市| 建平县| 南召县| 鄂伦春自治旗| 通辽市| 龙山县| 库车县| 天柱县| 什邡市| 博客| 宣化县| 平陆县| 浦县| 大方县| 工布江达县| 清水县| 焦作市| 阜康市| 错那县| 会东县| 乌审旗| 巴林左旗| 孙吴县| 平南县| 繁昌县| 土默特左旗| 大田县| 邢台县| 丰原市| 拜泉县| 五河县| 芒康县| 宝山区|