绘制RichTextBox

时间:2013-06-07 17:39:31

标签: c# winforms richtextbox

我正在尝试在RichTextBox中绘制单词和段落的边框,但是当我打开UserPaint时,它不再绘制文本,而我的自定义绘画似乎有用。可能我只是忘了打开别的东西?这就是我所拥有的

public partial class RichTextBoxEx : RichTextBox
{
    public RichTextBoxEx()
    {
        InitializeComponent();
        SetStyle(ControlStyles.UserPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        //Do some painting here
    }
}

使用this question中的信息对我没有帮助

2 个答案:

答案 0 :(得分:6)

这对我有用:

class RichBox : RichTextBox {
  private const int WM_PAINT = 15;

  protected override void WndProc(ref Message m) {
    if (m.Msg == WM_PAINT) {
      this.Invalidate();
      base.WndProc(ref m);
      using (Graphics g = Graphics.FromHwnd(this.Handle)) {
        g.DrawLine(Pens.Red, Point.Empty, 
                   new Point(this.ClientSize.Width - 1,
                             this.ClientSize.Height - 1));
      }
    } else {
      base.WndProc(ref m);
    }
  }
}

答案 1 :(得分:2)

富文本框中的事件背后是一种痛苦,因为它们不像您认为应该触发的那样触发。 Here's a post有人发布了所需的最低代码,以便拥有一个新控件,通过托管富文本框并拦截Windows绘制请求来为您公开正确的绘制事件。它在VB.Net中,但应该很容易翻译它供您使用。