0

在我的代码中,我将一个矩形绘制为面板的“框架”。我从 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 时,它只是......好吧我什至不确定如何描述它,这是“刷新”后它的图片: 应用刷新前后的打印画面,不包括文字

4

1 回答 1

2

“红十字”是在OnPaint方法内部引发异常时发生的情况。这意味着您的Paintlambda 代码中存在错误。

一旦抛出异常,就会设置一个内部标志,并且控件将不再尝试重新绘制自身。仅当应用程序再次运行或执行此技巧时才会重置。

怀疑知道您的问题是您不应该在事件中使用Dispose()PaintEventArgs对象。Paint

通常,您不必处理不是您自己创建的对象。

于 2012-12-30T14:57:50.980 回答