重新绘制面板上的矩形

时间:2012-12-30 14:16:49

标签: c# drawing rectangles

在我的代码中,我绘制一个矩形作为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时,它只是......我甚至不确定如何描述它,这是图片在“刷新”之后的作用: Printscreen of the application before and after refresh, excluding the text "normal state" and "after refresh" no edit, it really does this

1 个答案:

答案 0 :(得分:2)

“红十字会”是在OnPaint方法中抛出异常时发生的情况。这意味着您的代码中存在Paint lambda。

中的错误

抛出异常后,将设置内部标志,控件将不再尝试重新绘制自身。只有在再次运行应用程序或执行this trick时才会重置此项。

嫌疑人知道您的案例中的问题是不应Dispose() PaintEventArgs Paint个事件中的{{1}}对象。< /强>

一般情况下,您不必处置自己未创建的对象。