OnPaint does not update

本文关键字:update not does OnPaint | 更新日期: 2023-09-27 17:52:40

我有一个包含用户控件的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 ?

OnPaint does not update

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

不能直接调用OnPaint。

相反,继承自Win32 (InvalidateRect()),控件的区域需要无效(例如通过调用Invalidate()),以导致Windows在刷新期间调用控件的OnPaint方法。(参见这个问题)

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