在我的代码中,我绘制一个矩形作为Panel的“框架”。我从XML文件中获取所需的颜色作为字符串(如“红色”,“蓝色”等)。在创建面板时,我使用以下代码绘制它:
Strip.Paint += (sender, e) =>
{
//MessageBox.Show(clr.ToString());
Pen p = new Pen(Color.FromName(color), 2); // color is the string with name of the color
Rectangle r = new Rectangle(1, 1, 286, 36);
e.Graphics.DrawRectangle(p, r);
p.Dispose();
e.Dispose();
};
在应该刷新矩形的方法中,我添加了这一行
Strip.Refresh();
这很好用。但是,每隔30秒使用一次Timer,我会检查颜色是否已经改变,并且 如果是这样,请用请求的颜色重绘矩形。第一个矩形正确绘制。但是当Timer达到30时,它只是......我甚至不确定如何描述它,这是图片在“刷新”之后的作用:
答案 0 :(得分:2)
“红十字会”是在OnPaint
方法中抛出异常时发生的情况。这意味着您的代码中存在Paint
lambda。
抛出异常后,将设置内部标志,控件将不再尝试重新绘制自身。只有在再次运行应用程序或执行this trick时才会重置此项。
我嫌疑人知道您的案例中的问题是不应Dispose()
PaintEventArgs
Paint
个事件中的{{1}}对象。< /强>
一般情况下,您不必处置自己未创建的对象。