首页 > Windows开发 > 详细

解决WinForm界面闪烁问题

时间:2015-02-12 10:38:18      阅读:775      评论:0      收藏:0      [点我收藏+]

前言

之前將.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

 

http://www.dotblogs.com.tw/rainmaker/archive/2012/02/22/69811.aspx

解决WinForm界面闪烁问题

原文:http://www.cnblogs.com/chen110xi/p/4287415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!