【发布时间】:2011-07-06 12:31:14
【问题描述】:
我有一个组件,一个继承的 Panel,我在其中重写 OnPaint 事件以绘制一个 500 点的图形。因为我需要在图表上做一些选择,所以它在闪烁。我找到了这个 DoubleBuffered 属性,但是当我将它设置为 True 时,在面板构造函数中,绘图消失了。我调试它,我看到绘图方法仍在执行,但面板上没有任何内容。 有谁知道为什么会这样?
这是 .NET 3.5 - C#。 Winforms 应用程序
try
{
Graphics g = e.Graphics;
//Draw _graphArea:
g.DrawRectangle(Pens.Black, _graphArea);
_drawingObjectList.DrawGraph(g, _mainLinePen, _diffLinePen, _dotPen, _dotBrush, _notSelectedBrush, _selectedBrush);
DrawSelectionRectangle(g);
g.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
面板后代构造函数:
this.BackColor = Color.White;
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
【问题讨论】:
-
我认为这是.Net?语言?
-
@rene 是的。对不起。 C#。现在问题来了。
-
你能告诉我们你的绘图代码吗?
-
将 DoubleBuffered 属性更改为 true 是 only 发生变化的事情吗?
-
是的,代码会很有帮助。听起来默认背景正在覆盖您的图像。您可能没有设置 UserPaint 和 AllPaintingInWMPaint 类位。
标签: c# winforms drawing gdi panel