C# OnPaint不会更新

C# OnPaint不会更新,c#,onpaint,C#,Onpaint,我有一个包含用户控件的windows窗体。此用户控件具有以下代码: protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); pe.Graphics.DrawRectangle( new Pen(Color.Red, 5 + laenge), new Rectangle( new Point(50 + leerzeichen, hoehe),

我有一个包含用户控件的windows窗体。此用户控件具有以下代码:

protected override void OnPaint(PaintEventArgs pe)
{
  base.OnPaint(pe);
  pe.Graphics.DrawRectangle(
       new Pen(Color.Red, 5 + laenge), 
       new Rectangle(
             new Point(50 + leerzeichen, hoehe), 
             new Size(laenge + 20, 20)));
}

还有一些代码,现在可能不重要了。因此,当我启动程序时,它会绘制红色矩形。所有变量(laenge、leerzeichen、hoehe)在程序开始时都设置为0。现在,当我按下一个按钮时,变量正在改变,但是OnPaint没有绘制新的矩形?有什么问题吗?我是否需要以某种方式调用油漆

您需要调用
Invalidate()
,在更改变量后(它在内部调用
OnPaint
OnPaint)

您不直接调用OnPaint

相反,由于从Win32继承(Invalidate()),需要使控件的区域无效(例如,通过调用Invalidate()),以使Windows在刷新期间调用控件的OnPaint方法。(见附件)


请注意,只有当应用程序等待Windows消息队列时(即处理完用户请求或调用application.DoEvents()),操作系统才能处理绘制/刷新请求。

是否可能在同一坐标上绘制多个矩形?请通过调用
invalidate()尝试使控件无效
方法。这将触发绘制例程。请注意,在OnPaint方法中创建的笔正在泄漏!完成后,您需要将其处理掉。