[WIN]如何让您的UserControl显示时不闪烁

[WIN]如何让您的UserControl显示时不闪烁


前言

之前将.net 1.1 Windows Form程序升级到.net 4.0,结果在开画面时,闪的非常利害!  于是就开始找解决方法。

研究及解决

开始找到了设定DoubleBuffer=true,这个有一点点用,在高档的机器上面,但是在4年前的NB问题还是一样,尤其是当画面对象很多时,感觉是一个一个画出来! 还是被USER当~~

后来找到了“How to fix the flickering in User controls”,照他的方式来做,性能果然是一粒一的好呀!

他的方式是在Form及UserControl上覆写CreateParams,程序如下,

Form上的Code

C#

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 


VB

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams
    Get
        Dim cp As CreateParams = MyBase.CreateParams
        cp.ExStyle = cp.ExStyle Or &H2000000
        ' Turn on WS_EX_COMPOSITED
        Return cp
    End Get
End Property


UserControl的Code

C#

protected override CreateParams CreateParams {
  get {
    var parms = base.CreateParams;
    parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
    return parms;
  }
}


VB

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams
    Get
        Dim parms As System.Windows.Forms.CreateParams = MyBase.CreateParams
        'Turn off WS_CLIPCHILDREN
        parms.Style = (parms.Style And (Not &H2000000))
        Return parms
    End Get
End Property


运行状况:

1.在XP机器上,Border不会显示出来!

2.只要在Form上加入 Or &H2000000即可有效果,UserControl可不需加入那一段Code!

3.如果Form上没有加入 Or &H2000000,而UserControl有加入 And (Not &H2000000)的话,画面上的Label会有显示不出来的状况!

参考数据:How to fix the flickering in User controls

原文:大专栏  [WIN]如何让您的UserControl显示时不闪烁


猜你喜欢

转载自www.cnblogs.com/petewell/p/11489711.html