本文**:
我的作業系統是win7,使用的vs版本是vs2012,文中的**都是c#**。
這是乙個winform窗體,裡面放置了乙個panel,dock屬性為fill,backgroundimage使用了《少年電世界》2023年第02期的封面,backgroundimagelayout使用了stretch。
這個介面現在有兩個問題:
1、在窗體第一次被開啟時,背景會出現明顯的閃爍
2、在拉動窗體的邊界以調整窗體大小時,背景非出現明顯的閃爍
為了處理這一問題,我查了一些資料,也都逐個試過了,下面先說下其中的兩個有代表性方法:
方法1:直接使用雙緩衝
setstyle(controlstyles.userpaint, true);
setstyle(controlstyles.allpaintinginwmpaint, true); // 禁止擦除背景.
setstyle(controlstyles.doublebuffer, true); // 雙緩衝
我嘗試著將這段**加到窗體的建構函式中,並不能解決問題,閃爍依然非常明顯
在msdn上還有一篇文章《如何通過對窗體和控制項使用雙緩衝來減少圖形閃爍》
setstyle(controlstyles.optimizeddoublebuffer, true);
這個方法依然不能解決問題。
方法2:重寫createparams方法
方法2需要將以下這段**放在form類的**內:
protected override createparams createparams
}
這個方法我一開始嘗試的時候一度認為是有效的,但使用了一段時間後還是發現了問題:
1、這個方法可以解決問題1,但不能解決問題2
2、這個方法會影響一些其他控制項、元件的重繪(這點才是致命的)
因此,這個方法也不能解決問題。
上面兩個方法都不能解決問題,於是我繼續求助度娘,終於在下面這個頁面找到了解決方法:
方法3:封裝panel類
這個方法,需要新建乙個panelenhanced類繼承panel類,**如下:
/// /// 加強版 panel
///
class panelenhanced : panel
/// /// onpaint 事件
///
///
protected override void onpaint(painteventargs e)
base.onpaint(e);}}
將之前我們建立窗體中的panel容器換為我們新封裝的panelenhanced容器,將程式的背景放到裡面,再執行程式,程式背景閃爍的問題就完美解決了! 解決Winform應用程式中窗體背景閃爍的問題
本文 我的作業系統是win7,使用的vs版本是vs2012,文中的 都是c 這是乙個winform窗體,裡面放置了乙個panel,dock屬性為fill,backgroundimage使用了 少年電世界 2003年第02期的封面,backgroundimagelayout使用了stretch。這個介...
WinForm 應用程式窗體的啟動和關閉過程
以下是網路上可搜尋到的次序 當 windows form 應用程式啟動時,會以下列順序引發主要表單的啟動事件 system.windows.forms.control.handlecreated system.windows.forms.control.bindingcontextchanged s...
C 窗體應用程式
看了一段時間的c 了,於是就想實戰一下,看了網上的一些教程,用vs寫乙個窗體程式,拉起乙個視窗,本人想著從初級的入門開始,到以後可以根據自己的需求,寫出一些上位機軟體和一些工具方便自己除錯微控制器 用。1 include 2 include 3 include 4 define win32 lean...