1

我想在每 100 毫秒 600 个点的面板中绘制绘图图。当我使用 Graphics 对象并简单地绘制一个椭圆时,屏幕会闪烁!我怎样才能有效地绘制这样的图表而不闪烁?!

4

2 回答 2

0

阻止这种情况的一种简单方法是打开双缓冲。您的表单有一个双缓冲属性,您可以将其设置为 true。

或者有时您可以在控件上执行它,如果它支持它。

例如

class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
    }
}
于 2012-07-21T12:27:36.207 回答
0

面板的双缓冲需要通过继承开启:

public class BufferedPanel : Panel {
  public BufferedPanel() {
    this.DoubleBuffered = true;
    this.ResizeRedraw = true;
  }
}

然后确保使用控件的实际绘制事件:

public Form1() {
  InitializeComponent();
  bufferedPanel1.Paint += bufferedPanel1_Paint;
}

private void bufferedPanel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.DrawSomething(...);
}

避免使用CreateGraphics(),因为那只是一个临时图纸。

于 2012-07-21T12:31:31.933 回答