2012-08-16 37 views
0

一個例子的子面板的正確或優選的方法:什麼是繪製用戶形式

使用VS我可以創建MyControl從用戶控件派生,此可添加一組數據作爲成員或屬性。 使用視覺設計師我可以爲MyControl添加兩個面板 - 每個面板都使用我打算提供的方法呈現相同的數據,但採用不同的形式(FTSOA表示餅圖和條形圖)。

我認爲有很多方法可以讓MyControl使用這些方法重新繪製面板。

首先使用VS爲每個面板添加一個繪畫事件。這是快速實現的,並允許方法訪問MyControl數據,因爲它們是在MyControl類中創建的。

其次重寫每個面板的OnPaint方法。 AFAIK要做到這一點,需要爲每個面板和關聯的類創建一個UserControl。然後,每個類的OnPaint方法都可以被覆蓋。缺點是每個類都必須被授予訪問MyControl數據的權限。

第三,它也可能(我沒有做過這件事)重寫MyControl OnPaint並手動重新繪製每個面板也是可能的 - 但掌握圖形等是一個問題。

問題: 我可以(1 & 2)工作,但我想知道其他人的想法。

回答

1

好吧,以上都是。但面板控制當然沒有被優化成爲一個很好的控制繪畫。它來自ScrollableControl,這就是它真正擅長的,它可以滾動其內容的容器。移動一組控件也是一種快捷的方式。或者隱藏它們。或者禁用它們。

它不完全適合繪畫。它不會雙重緩衝,因此需要從中獲得自己的控制權。並且它還優化了容器行爲,您需要打開ControlStyles.ResizeRedraw樣式以調整Paint事件的大小。如果你真的需要自定義繪畫需要滾動,那麼面板是一個很好的基類派生。

聽起來我應該真的重寫UserControl的OnPaint()方法。最大限度地減少控件的數量是一個非常強大的優化目標,它們非常昂貴。

+0

啊。那麼繪製圖形和東西,也許我應該選擇一個圖片框。 我認爲你更喜歡前者,因爲它使用從UserForm派生的更少的類對象。 – 2012-08-16 17:43:47

+0

經過一番調查後,我決定堅持使用Panel控件。 我仍然覺得這並不完美,但我想繪製圖形類型的線條,並擁有由擁有控件提供的數據,並對包括滾輪(平移/縮放/ ...)在內的鼠標事件作出響應,因此它需要有焦點太。 我很驚訝沒有專門爲此目標的2D繪圖控制。 – 2012-08-16 22:05:28

相關問題