2010-12-16 51 views
1

我有一個從DataGridView繼承的用戶控件。我重寫了OnRowPrePaint,OnRowPostPaint,OnCellPaint和其他一些內容,所以我可以根據需要繪製整個事物。除滾動條之外,一切都很精美。我如何攔截正在繪畫的滾動條並繪製自己的?C#:重寫DataGridView ScrollBars(自定義OnPaint)?

理想情況下,有一些數據結構包含滾動條本身的邊界以及實際上滾動滑塊的邊界。然後,我可以在這些位置繪製圖形圖層。

有沒有辦法做到這一點?看起來好像其他所有東西都是,所以我會想象有一種方法可以做到這一點......

+1

這是不可能的,放棄一切希望。 – 2010-12-17 00:38:37

+0

爲了增加漢斯所說的話:有一些黑客(如隱藏默認滾動條和繪製自己的),但這些都是*方式*太多的工作,以至於沒有任何理由。主要是,這並沒有想到,因爲控件使用標準的Windows滾動條,而不是它自己繪製的滾動條。我同意你應該放棄所有希望,除非*絕對必要*。 – 2010-12-17 01:24:49

+0

不得不同意漢斯和科迪 - 痛苦的世界。可能不是一個非常有用的建議,但是當你需要這種靈活性時,WPF非常好。 – 2010-12-17 18:50:02

回答

0

當從滾動類繼承,將它添加到子新:

Me.SetStyle(ControlStyles.UserPaint, True) 

OnPaint事件現在會火。

要覆蓋從點擊控件時,正在制定的標準按鈕/滑塊:

Me.SetStyle(ControlStyles.UserMouse, True) 

,並減少閃爍:

Me.SetStyle(ControlStyles.AllPaintingInWmPaint, False) 

編輯:

我清楚需要學習讀書。

沒有注意到

用戶控件是從 的DataGridView繼承

位........

-1

首先想到的是:使用滾動條中的繪畫事件。無論如何,滾動條都來自Control。可能不是最佳的解決方案......

public class MyDGV : DataGridView 
{ 
    this.VerticalScrollBar.Paint += new PaintEventHandler(VerticalScrollBar_Paint); 
} 

void VerticalScrollBar_Paint(object sender, PaintEventArgs e) 
{ 
    // Paint stuff 
} 
+0

-1即使您重寫此代碼以使其實際編譯後,它仍然會*無*。滾動條不是由「Paint」事件繪製的,而是由Windows本身繪製的。你自己試過了嗎? – 2010-12-18 01:49:48