OnPaint不会更新

时间:2013-01-11 08:42:48

标签: 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), 
             new Size(laenge + 20, 20)));
}

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

2 个答案:

答案 0 :(得分:5)

您需要在更改变量后调用Invalidate()(它会调用OnPaint internaly)

答案 1 :(得分:0)

您不直接调用OnPaint。

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

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