RichTextBox и UserPaint - PullRequest
       36

RichTextBox и UserPaint

4 голосов
/ 18 февраля 2011

Я пытаюсь закрасить RichTextBox, но единственный способ сделать это - вызвать OnPaint/OnPaintBackground.

Проблема в том, что OnPaint или OnPaintBackground не вызываются, если не включен флаг «UserPaint», но когда этот флаг включен - сам текст не будет окрашен!

как я могу решить это?

1 Ответ

8 голосов
/ 06 мая 2011

Это код, который я использую для обеспечения вызова OnPaint после того, как RichTextBox сначала обработал саму картину:

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; }
    }


}
...