我有一个包含用户控件的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?
答案 0 :(得分:5)
您需要在更改变量后调用Invalidate()
(它会调用OnPaint
internaly)
答案 1 :(得分:0)
您不直接调用OnPaint。
相反,继承自Win32(InvalidateRect()),控件的区域需要被无效(例如,通过调用Invalidate())以使Windows在刷新期间调用控件的OnPaint方法。 (见this question)
请注意,只有当应用程序等待Windows消息队列时(即处理完用户请求或调用Application.DoEvents()),操作系统才能处理绘制/刷新请求。