最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 重寫ComboBox實(shí)現(xiàn)下拉任意組件的方法

 更新時(shí)間:2016年10月25日 10:32:46   投稿:mrr  
C#種的下拉框ComboBox不支持下拉復(fù)選框列表與下拉樹(shù)形列表等,系統(tǒng)中需要用到的地方使用了第三方組件,現(xiàn)在需要將第三方組件替換掉。這篇文章主要介紹了C# 重寫ComboBox實(shí)現(xiàn)下拉任意組件的相關(guān)資料,需要的朋友可以參考下

一、需求

C#種的下拉框ComboBox不支持下拉復(fù)選框列表與下拉樹(shù)形列表等,系統(tǒng)中需要用到的地方使用了第三方組件,現(xiàn)在需要將第三方組件替換掉。

二、設(shè)計(jì)

基本思路:重寫ComboBox,將原生的下拉部分屏蔽,使用toolStripDropDown制作下拉彈出

三、問(wèn)題解決

1. 問(wèn)題:toolStripDropDown中放toolStripControlHost時(shí)會(huì)有邊框產(chǎn)生,同時(shí)CheckedListBox的duck為full時(shí)底端會(huì)有很大空白

解決:

toolStripControlHost.Margin = Padding.Empty;
toolStripControlHost.Padding = Padding.Empty;
toolStripControlHost.AutoSize = false;
toolStripDropDown.Padding = Padding.Empty;
CheckedListBox設(shè)置屬性IntergralHeight為false

2. 問(wèn)題:BorderStyle對(duì)于不同組件的顯示效果不同,下拉部分邊緣顯示效果不好

解決:將組件BorderStyle統(tǒng)一設(shè)為None,再放入panel中,Panel重繪邊線與背景后加入toolStripControlHost

3. 問(wèn)題:下拉部分需要實(shí)現(xiàn)可拖動(dòng)大小

解決:通過(guò)MouseDown、MouseLeave、MouseMove三個(gè)事件配合Cusor的位置來(lái)實(shí)現(xiàn)鼠標(biāo)拖動(dòng)改變組件大小,設(shè)置Label文字內(nèi)容為"◢"作為拖動(dòng)的指示

4. 問(wèn)題:拖動(dòng)時(shí)組件閃爍嚴(yán)重

解決:使用雙緩存,重寫ToolStripDropDown中的CreateParams,設(shè)置cp.ExStyle |= 0x02000000;//雙緩存

5. 問(wèn)題:下拉焦點(diǎn)問(wèn)題,點(diǎn)擊下拉后下拉部分沒(méi)有獲取焦點(diǎn),導(dǎo)致右下角拖放標(biāo)志捕捉不到鼠標(biāo)

解決:ComboBox在事件OnDropDown之后可能還會(huì)進(jìn)行某些操作導(dǎo)致再次獲取焦點(diǎn),所以要將設(shè)置下拉部分焦點(diǎn)的動(dòng)作寫在OnMouseClick的事件中

6. 問(wèn)題: ComboBox的文本輸入問(wèn)題

解決:當(dāng)DropDownStyle為DropDown時(shí),ComboBox可輸入,這是不太合適的,但是無(wú)法設(shè)置不能輸入。

當(dāng)DropDownStyle為DropDownList時(shí),可以實(shí)現(xiàn)不能手動(dòng)輸入,但是不能直接對(duì)Text賦值,需要New一個(gè)Item再將Item的值選中實(shí)現(xiàn)Text顯示

7. 問(wèn)題: ComboBox的下拉部分隱藏

解決:當(dāng)需要隱藏原生下拉部分時(shí),設(shè)置DropDownHeight=1即可

8. 問(wèn)題: 下拉部分存在時(shí)點(diǎn)擊下拉框,關(guān)閉下拉

解決:由于toolStripDropDown的關(guān)閉事件在ComboBox的點(diǎn)擊事件之前,所以不能通過(guò)toolStripDropDown的狀態(tài)來(lái)設(shè)計(jì)。

我的方法是,設(shè)置一個(gè)全局變量isCursorOnComboBox,用于判斷關(guān)閉下拉部分時(shí)光標(biāo)是否在comboBox上。在toolStripDropDown的Closed事件中改變這個(gè)值,在點(diǎn)擊下拉事件中根據(jù)這個(gè)值來(lái)決定是否要生成下拉部分。

9. 問(wèn)題: 當(dāng)不生成下拉部分,沒(méi)有失去焦點(diǎn)時(shí),ComboBox點(diǎn)擊一次后處于下拉狀態(tài),需要再點(diǎn)擊一次才恢復(fù)正常

解決:通過(guò)模擬鍵盤輸入Enter鍵強(qiáng)行恢復(fù)

10.問(wèn)題: CheckedListBox選中后顯示選中Items的內(nèi)容

解決:主要問(wèn)題在事件的選擇上,如果寫在selected等事件中時(shí),與復(fù)選框的選擇有出入,不適合(如雙擊等),寫在ItemCheck事件上時(shí)發(fā)現(xiàn)是在選中前,導(dǎo)致正在選的Item值判斷延遲。

所以最好選擇與Check直接掛鉤的ItemCheck事件,同時(shí)對(duì)正在Check的Item進(jìn)行特殊處理,使用異或(!=)運(yùn)算。

11.問(wèn)題: 兼容性,其他組件的下拉支持

解決:在TypeC中添加Other條目,當(dāng)下拉類型為Other時(shí),設(shè)置DropDown內(nèi)容為普通Control,調(diào)用方可以通過(guò)設(shè)置SetDropDown(Control)來(lái)設(shè)置要顯示的組件內(nèi)容。

12.問(wèn)題: 下拉面板顏色在Windows不同主題下顯示問(wèn)題

解決:由于在Windows的經(jīng)典模式下,使用Sytem.XXX 調(diào)用不到顏色,導(dǎo)致下拉框顏色顯示不出。

繪制時(shí)使用Color.XXX中的顏色,在不同系統(tǒng)模式下顯示都正常。

四、使用方法

1. 放下拉復(fù)選列表

① 界面拖出HsComboBox

② 設(shè)置屬性CtlType = CheckedListBox

③ (可選)代碼調(diào)用hsComboBox.SetDropDown(CheckedListBox)重新設(shè)置內(nèi)容

④ 代碼調(diào)用hsComboBox. CheckedListBox可獲取組件

2. 放下拉樹(shù)形

⑤ 界面拖出HsComboBox

⑥ 設(shè)置屬性CtlType = TreeView

⑦ (可選)代碼調(diào)用hsComboBox.SetDropDown(TreeView)重新設(shè)置內(nèi)容

⑧ 代碼調(diào)用hsComboBox. TreeView可獲取組件

3. 做普通ComboBox

⑨ 界面拖出HsComboBox

⑩ 設(shè)置屬性CtlType = Null

4. 放任意Control

? 界面拖出HsComboBox

? 設(shè)置屬性CtlType = Other

? 代碼調(diào)用hsComboBox.SetDropDown(Control)放入內(nèi)容

? 代碼調(diào)用hsComboBox.Control可獲取組件

五、注意要點(diǎn)

1. ComboBox的Text設(shè)置

調(diào)用函數(shù)ShowText()設(shè)置Text內(nèi)容,可用于自定義組件的事件等

2. DropDownStyle

為禁止文本手工輸入,DropDownStyle將在構(gòu)造函數(shù)中設(shè)為DropDownList

以上所述是小編給大家介紹的C# 重寫ComboBox實(shí)現(xiàn)下拉任意組件的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C#鎖住文件的操作步驟

    C#鎖住文件的操作步驟

    在本篇文章里小編給大家整理的是關(guān)于C#鎖住文件的操作步驟以及相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2019-08-08
  • C#中委托用法實(shí)例分析

    C#中委托用法實(shí)例分析

    這篇文章主要介紹了C#中委托用法,較為詳細(xì)的分析了C#中委托的概念與相關(guān)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#中LINQ to Objects查詢的實(shí)現(xiàn)

    C#中LINQ to Objects查詢的實(shí)現(xiàn)

    LINQ to Objects是LINQ技術(shù)在C#中的一種應(yīng)用,它專門用于對(duì)內(nèi)存中的對(duì)象集合進(jìn)行查詢和操作,本文就詳細(xì)的介紹C#中LINQ to Objects查詢的實(shí)現(xiàn),感興趣的可以了解一下
    2023-08-08
  • C#面向?qū)ο笤O(shè)計(jì)原則之開(kāi)閉原則

    C#面向?qū)ο笤O(shè)計(jì)原則之開(kāi)閉原則

    這篇文章介紹了C#面向?qū)ο笤O(shè)計(jì)原則之開(kāi)閉原則,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷

    C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • unity實(shí)現(xiàn)延遲回調(diào)工具

    unity實(shí)現(xiàn)延遲回調(diào)工具

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)延遲回調(diào)工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#軟件注冊(cè)碼的實(shí)現(xiàn)代碼

    C#軟件注冊(cè)碼的實(shí)現(xiàn)代碼

    開(kāi)發(fā)軟件時(shí),當(dāng)用到商業(yè)用途時(shí),注冊(cè)碼與激活碼就顯得很重要了,現(xiàn)在的軟件技術(shù)實(shí)在在強(qiáng)了,各種國(guó)內(nèi)外大型軟件都有注冊(cè)機(jī)制,但我們學(xué)習(xí)的是技術(shù)
    2013-05-05
  • C#實(shí)現(xiàn)基于任務(wù)的異步編程模式

    C#實(shí)現(xiàn)基于任務(wù)的異步編程模式

    本文詳細(xì)講解了C#實(shí)現(xiàn)基于任務(wù)的異步編程模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)讀寫員工IC卡的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 淺析C# web訪問(wèn)mysql數(shù)據(jù)庫(kù)-整理歸納總結(jié)

    淺析C# web訪問(wèn)mysql數(shù)據(jù)庫(kù)-整理歸納總結(jié)

    本篇文章是對(duì)C#中的web訪問(wèn)mysql數(shù)據(jù)庫(kù)的一些知識(shí)點(diǎn)進(jìn)行了整理歸納總結(jié),需要的朋友可以參考下
    2013-07-07

最新評(píng)論

苗栗市| 昭觉县| 衡东县| 长春市| 北票市| 邓州市| 德庆县| 改则县| 永宁县| 松桃| 柯坪县| 波密县| 潮州市| 福鼎市| 包头市| 中宁县| 临邑县| 乌拉特中旗| 剑川县| 盐边县| 扶绥县| 天气| 怀安县| 资兴市| 锡林郭勒盟| 永吉县| 沐川县| 德保县| 屏边| 武定县| 宁海县| 金堂县| 台州市| 莎车县| 齐齐哈尔市| 元江| 铜山县| 娄底市| 江川县| 全南县| 靖西县|