2011-02-18 50 views
4

我想繪製一個RichTextBox,但我能做到的唯一方法是通過調用OnPaint/OnPaintBackgroundRichTextBox和UserPaint

問題是OnPaint或OnPaintBackground不會被調用,除非「UserPaint」標誌打開,但是當此標誌打開時 - 文本本身不會被繪製!

我該如何解決這個問題?

+0

什麼樣的你在說什麼「過漆」?改變背景顏色?在文本的頂部繪圖?在它下面? – 2011-03-08 21:47:25

回答

8

這是我用什麼來保證的OnPaint被稱爲RichTextBox中已經處理了繪畫本身first之後的代碼:

class MyRichTextBox: RichTextBox 
{ 
    private const int WM_PAINT = 15; 
    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     base.WndProc (ref m); 
     if (m.Msg == WM_PAINT && !inhibitPaint) 
     { 
      // raise the paint event 
      using (Graphics graphic = base.CreateGraphics()) 
       OnPaint(new PaintEventArgs(graphic, 
       base.ClientRectangle)); 
     } 

    } 

    private bool inhibitPaint = false; 

    public bool InhibitPaint 
    { 
     set { inhibitPaint = value; } 
    } 


}