欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

一、需求

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

二、設(shè)計

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

三、問題解決

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

解決:

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

2. 問題:BorderStyle對于不同組件的顯示效果不同,下拉部分邊緣顯示效果不好

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

3. 問題:下拉部分需要實現(xiàn)可拖動大小

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

4. 問題:拖動時組件閃爍嚴(yán)重

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

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

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

6. 問題: ComboBox的文本輸入問題

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

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

7. 問題: ComboBox的下拉部分隱藏

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

8. 問題: 下拉部分存在時點擊下拉框,關(guān)閉下拉

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

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

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

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

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

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

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

11.問題: 兼容性,其他組件的下拉支持

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

12.問題: 下拉面板顏色在Windows不同主題下顯示問題

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

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

四、使用方法

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

① 界面拖出HsComboBox

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

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

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

2. 放下拉樹形

⑤ 界面拖出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可獲取組件

五、注意要點

1. ComboBox的Text設(shè)置

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

2. DropDownStyle

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

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

上一篇:C#實現(xiàn)創(chuàng)建桌面快捷方式與添加網(wǎng)頁到收藏夾的示例

欄    目:C#教程

下一篇:C# 清除cookies的代碼

本文標(biāo)題:C# 重寫ComboBox實現(xiàn)下拉任意組件的方法

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6203.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有