C#:關於WinForm中ComboBox的探究
ComboBox就是.net裡面用於做下拉選單的控制元件。
平時用得很多,卻對它知道的很少。
其實ComboBox並不像平常以為的那樣是一整個控制元件。而是由其他控制元件複合而成的。
其中,下拉選單的那個三角形按鈕和輸入框的邊框都是ComboBox的整體。是繪製出來的。
而,那個可以輸入的部分則是由一個無邊框的Edit控制元件構成的。
知道了這一點就可以去解釋一個問題。
我們發現,當ComboBox的Enable設定為False的時候,整個控制元件會變成灰色。
在有的情況下,我們需要改變ComboBox在不可用狀態下的顏色。
我們可以去繼承它,然後重繪它的外觀。比如:
經過繪製了邊框和填充了背景色之後,我們發現ComboBox在不可用狀態下的樣子有點讓人不解
也就是說,經過繪製,我們沒有把那個按鈕畫出來,然後邊框畫成了藍色,背景畫成了紅色。
但是,中間那塊灰色區域是怎麼回事?
這就是因為。ComboBox會把自己的Enable屬性賦值給Edit控制元件。從而導致Edit控制元件也出現了不可用。
但是由於重繪的時候只能重繪ComboBox,裡面的Edit的樣式是自動由系統繪製的,所以控制不到。
對於這一點應該怎麼辦呢?
既然裡面是一個控制元件。那麼就應該可以拿到它的控制代碼。方法如下,先宣告API:
在適當的地方呼叫
就可以得到裡面的Edit的控制代碼。
值得注意的是,上面這句只有在ComboBox的外部呼叫的時候才行。如果是在ComboBox內部呼叫。會出錯。
所以可以在ComboBox的外面再包一層使用者控制元件。在Enable屬性被更改的時候來做這個。
拿到Edit的控制代碼之後,我們只要用API ShowWindow來隱藏掉它。然後再自己重繪Text到ComboBox的背景上,就可以做出一個可以改變顏色的不可用ComboBox了。