zoukankan      html  css  js  c++  java
  • 解决WinForm界面闪烁问题

    前言

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

  • 相关阅读:
    bat 命令如何启动远程PC上的一个程序
    Python的内置list类
    Python3的列表推导式
    python3修改Excel中固定单元格的内容
    python3“腌制”数据
    python3用print写数据到文件中
    github在线预览项目(html)
    github简单上手
    事件DOMContentLoaded和load的区别
    jquery 一些事件
  • 原文地址:https://www.cnblogs.com/chen110xi/p/4287415.html
Copyright © 2011-2022 走看看