C#中的绘图框架以避免闪烁

时间:2014-11-27 02:45:39

标签: c# winforms flicker paintevent

我刚刚开始学习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是通过Refresh()上的Timer触发的。

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

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

因此,我想问一下是否有更优雅的方法来实现这一目标。

谢谢!

1 个答案:

答案 0 :(得分: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);
    }
}