如何在C#windows窗体表单应用程序中停止闪烁?

时间:2013-04-15 07:23:02

标签: winforms c#-4.0 panel flicker doublebuffered

我有主Panel和Auto Scroll = true,所有控件都放在主面板上。功能工作正常,但是当我点击任何控件或向下或向上滚动时,每次单击或滚动时它都会开始闪烁一秒,

我也设置了

 DoubleBuffered = true; 

但它不适合我。

任何人都可以建议我解决方案或新代码,这可以帮助我,我花了两天时间来解决这个问题。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试将其放入表单类中:

private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;

protected override void WndProc (ref Message m)
{
    if ((m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
        && (((int)m.WParam & 0xFFFF) == 5))
    {
        // Change SB_THUMBTRACK to SB_THUMBPOSITION
        m.WParam = (IntPtr)(((int)m.WParam & ~0xFFFF) | 4);
    }
    base.WndProc (ref m);
}

您还可以将其添加到表单类构造函数中:

SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);

我正在使用Windows 8,并且我没有从AutoScroll = true的面板中闪烁。但上述方法应解决闪烁问题。