在前些日子裡,我寫了有十篇關於WinForm 控制項的製作教程,在這些教程裡使用的例子都十分的簡單,並且樣本的控制項基本沒有什麼用,是該寫一個簡單實用的控制項的時候了。今天我就來製作一個VS風格的ToolBox工具箱。VS風格的ToolBox和QQ的介面很相似,都是有多個欄目,並且這些欄目可以展開和摺疊,當滑鼠在某個子欄目上時,可以高亮顯示,另外在VS風格的ToolBox中,點擊選中項目的時候,要用特殊的顏色標識出來。如所示:
其實,控制項的製作並不神秘,我們只需要把掌握的知識組合起來即可。現在我們動手來做這個控制項,首先看看我們要處理哪些要點:
1. 建立控制項的邊框,我在前邊的文章也講過(),直接將代碼複製過來,稍做修改即可。
2. 添加捲軸,因為我們的控制項只需要垂直的滾動,所以我只只加入一個垂直的捲軸。
3. ToolBox包含多個Category,我們不但要建立Category類,還要建立這個類的集合。
4. 每一個Category包含多個Item,我們不但要建立ToolBoxItem類,還要建立這個類的集合。
5. 重載OnPaint方法,繪製控制項的內容,在繪製的時候要注意捲軸的當前值,由於採用了雙緩衝機制,所以每次總是將所有的內容重繪一次,不考慮ClipRect。
6. 寫一個方法,根據滑鼠的座標計算出滑鼠指向的Item或者Category,這個方法是這個控制項的核心。
7. 重載OnMouseMove方法,當滑鼠指向某個Item的時候,高亮顯示出來。
8. 重載 OnMouseDown方法,當滑鼠在某個Item上按下的時候,用指定的顏色標識出來,如果滑鼠按下的地方是一個Category,根據當前的情況展開或者時摺疊這個category。
9. 計算控制項目前狀態的內容的總的高度,用於設定捲軸的可見與不可見。
10. 暴露一個屬性,用於為使用者提供當前選中的Item。
11. 聲明一個ItemChanged事件,便於使用者在選擇另一個Item時添加處理的代碼。
實現了上述的內容,這個控制項也就基本完成了。由於代碼並不複雜,我就不將代碼列出來講解了,我將提供代碼的下載,大家在看代碼的時候,如有不明白的地方,可以參考我前面的控制項教程。因為只花了幾個小時寫的這個控制項,難免還有一些問題,請大家指出。
原始碼下載