程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 重寫ComboBox完成下拉恣意組件的辦法

C# 重寫ComboBox完成下拉恣意組件的辦法

編輯:C#入門知識

C# 重寫ComboBox完成下拉恣意組件的辦法。本站提示廣大學習愛好者:(C# 重寫ComboBox完成下拉恣意組件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 重寫ComboBox完成下拉恣意組件的辦法正文


一、需求

C#種的下拉框ComboBox不支持下拉復選框列表與下拉樹形列表等,零碎中需求用到的中央運用了第三方組件,如今需求將第三方組件交換掉。

二、設計

根本思緒:重寫ComboBox,將原生的下拉局部屏蔽,運用toolStripDropDown制造下拉彈出

三、問題處理

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

處理:

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

2. 問題:BorderStyle關於不同組件的顯示效果不同,下拉局部邊緣顯示效果不好

處理:將組件BorderStyle一致設為None,再放入panel中,Panel重繪邊線與背景後參加toolStripControlHost

3. 問題:下拉局部需求完成可拖動大小

處理:經過MouseDown、MouseLeave、MouseMove三個事情配合Cusor的地位來完成鼠標拖動改動組件大小,設置Label文字內容為"◢"作為拖動的指示

4. 問題:拖動時組件閃爍嚴重

處理:運用雙緩存,重寫ToolStripDropDown中的CreateParams,設置cp.ExStyle |= 0x02000000;//雙緩存

5. 問題:下拉焦點問題,點擊下拉後下拉局部沒有獲取焦點,招致右下角拖放標志捕獲不到鼠標

處理:ComboBox在事情OnDropDown之後能夠還會停止某些操作招致再次獲取焦點,所以要將設置下拉局部焦點的舉措寫在OnMouseClick的事情中

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

處理:當DropDownStyle為DropDown時,ComboBox可輸出,這是不太適宜的,但是無法設置不能輸出。

當DropDownStyle為DropDownList時,可以完成不能手動輸出,但是不能直接對Text賦值,需求New一個Item再將Item的值選中完成Text顯示

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

處理:當需求隱藏原生下拉局部時,設置DropDownHeight=1即可

8. 問題: 下拉局部存在時點擊下拉框,封閉下拉

處理:由於toolStripDropDown的封閉事情在ComboBox的點擊事情之前,所以不能經過toolStripDropDown的形態來設計。

我的辦法是,設置一個全局變量isCursorOnComboBox,用於判別封閉下拉局部光陰標能否在comboBox上。在toolStripDropDown的Closed事情中改動這個值,在點擊下拉事情中依據這個值來決議能否要生成下拉局部。

9. 問題: 當不生成下拉局部,沒有得到焦點時,ComboBox點擊一次後處於下拉形態,需求再點擊一次才恢復正常

處理:經過模仿鍵盤輸出Enter鍵強行恢復

10.問題: CheckedListBox選中後顯示選中Items的內容

處理:次要問題在事情的選擇上,假如寫在selected等事情中時,與復選框的選擇有出入,不合適(如雙擊等),寫在ItemCheck事情上時發現是在選中前,招致正在選的Item值判別延遲。

所以最好選擇與Check直接掛鉤的ItemCheck事情,同時對正在Check的Item停止特殊處置,運用異或(!=)運算。

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

處理:在TypeC中添加Other條目,當下拉類型為Other時,設置DropDown內容為普通Control,調用方可以經過設置SetDropDown(Control)來設置要顯示的組件內容。

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

處理:由於在Windows的經典形式下,運用Sytem.XXX 調用不到顏色,招致下拉框顏色顯示不出。

繪制時運用Color.XXX中的顏色,在不同零碎形式下顯示都正常。

四、運用辦法

1. 放下拉復選列表

① 界面拖出HsComboBox

② 設置屬性CtlType = CheckedListBox

③ (可選)代碼調用hsComboBox.SetDropDown(CheckedListBox)重新設置內容

④ 代碼調用hsComboBox. CheckedListBox可獲取組件

2. 放下拉樹形

⑤ 界面拖出HsComboBox

⑥ 設置屬性CtlType = TreeView

⑦ (可選)代碼調用hsComboBox.SetDropDown(TreeView)重新設置內容

⑧ 代碼調用hsComboBox. TreeView可獲取組件

3. 做普通ComboBox

⑨ 界面拖出HsComboBox

⑩ 設置屬性CtlType = Null

4. 聽任意Control

? 界面拖出HsComboBox

? 設置屬性CtlType = Other

? 代碼調用hsComboBox.SetDropDown(Control)放入內容

? 代碼調用hsComboBox.Control可獲取組件

五、留意要點

1. ComboBox的Text設置

調用函數ShowText()設置Text內容,可用於自定義組件的事情等

2. DropDownStyle

為制止文本手工輸出,DropDownStyle將在結構函數中設為DropDownList

以上所述是給大家引見的C# 重寫ComboBox完成下拉恣意組件的辦法,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved