我有一个包含用户控件的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吗?
发布于 2013-01-11 16:46:29
您需要在更改变量(它调用OnPaint Invalidate() )之后调用内部
发布于 2013-01-11 16:52:44
您不能直接调用OnPaint。
相反,由于继承自Win32 (InvalidateRect()),控件的区域需要无效(例如,通过调用Invalidate()),以使窗口在刷新期间调用控件的OnPaint方法。(参见this question)
请注意,只有当应用程序等待Windows消息队列时(即,它已完成处理用户请求或调用Application.DoEvents()),操作系统才能处理绘制/刷新请求。
https://stackoverflow.com/questions/14274439
复制相似问题