1

我刚刚开始学习 C#,我想就绘画方面的良好做法寻求建议,以避免闪烁。

我使用了这里提到的方法,例如双缓冲和打开WS_EX_COMPOSITED,但对我有用的方法是:

调用PaintEventHandler

this.dgData.Paint += new System.Windows.Forms.PaintEventHandler(this.myPaint);

并使用PaintEventArgs绘制:

private void myPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    Graphics myGraphics = e.Graphics;
    // Use myGraphics to draw
}

并且PaintEventHandler是通过 a Refresh()on a触发的Timer

private void TimerElapsed(object sender, System.EventArgs eventArgs)
{
    Refresh();
}

但是,我担心的是,这种绘图方式需要我对PaintEventHandler表单上的每个控件都有一个。

因此,我想问是否有更优雅的方式来实现这一点。

谢谢!

4

1 回答 1

0

我无法再告诉我在哪里找到此代码,但这是我为消除闪烁所做的:我在控件的构造函数中设置了这些样式:

public partial class MyControl : Control
{    
    public MyControl()
    {
        InitializeComponent()
        SetStyle(ControlStyles.UserPaint, true);
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        SetStyle(ControlStyles.ResizeRedraw, true);
        SetStyle(ControlStyles.UserMouse, true);
    }
}
于 2014-11-27T06:35:36.733 回答