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

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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显示时不闪烁


以上是关于[WIN]如何让您的UserControl显示时不闪烁的主要内容,如果未能解决你的问题,请参考以下文章

如何让您的 MDI MFC 应用程序在任务栏中显示一个实例?

双击 TreeViewItem 在 MainWindow 的 Grid 中显示 UserControl

win10如何设置在Alt+tab切换时不显示某个程序?

如何让您的 Windows Phone 7.5 应用程序保持领先

如何让您的 Discord 机器人说出具体内容,然后删除上一条消息

如何使用 Performance API 让您的网站更快