[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
如何让您的 Windows Phone 7.5 应用程序保持领先