我试图在下面的代码中从1号线到2号线:

using System;
using System.Windows.Forms;

namespace MyNameSpace
{
    internal class MyTextBox : System.Windows.Forms.TextBox
    {
        protected override void OnEnabledChanged(EventArgs e)
        {
            base.OnEnabledChanged(e);
            Invalidate(); // Line #1 - can get here
            Refresh();
        }

       protected override void OnPaint(PaintEventArgs e)
       {
            base.OnPaint(e);
            System.Diagnostics.Debugger.Break(); // Line #2 - can't get here
       }
    }
}

但是,似乎neiter Invalidate()或Refresh()都会导致调用OnPaint(PaintEventArgs e)。两个问题:
  • 为什么不起作用?
  • 如果无法解决:我只想调用OnPaint(PaintEventArgs e)才能访问e.Graphics对象-还有其他方法可以做到这一点吗?
  • 最佳答案

    要覆盖控件的图形,必须将样式设置为UserPaint,如下所示:

    this.SetStyle(ControlStyles.UserPaint, true);
    

    请参阅此以获取更多信息:

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setstyle.aspx

    关于c# - Invalidate()和Refresh()都不调用OnPaint(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2627958/

    10-11 13:47