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 ?
您需要调用Invalidate()
,在更改变量后(它内部调用OnPaint
)
不能直接调用OnPaint。
相反,继承自Win32 (InvalidateRect()),控件的区域需要无效(例如通过调用Invalidate()),以导致Windows在刷新期间调用控件的OnPaint方法。(参见这个问题)
请注意,操作系统只能在应用程序等待Windows消息队列(即完成处理用户请求,或调用application . doevents())时才能处理绘制/刷新请求。