winform闪屏问题解决方案
這里所說的解決方案,其實也沒有真正解決閃屏問題,暫時因個人能力和知識方面的原因,還沒有找到比較好的解決方案,也請園子里的各位大俠大哥們出手共享大家的解決方案。
????? 出現(xiàn)閃屏問題的原因:在winform開發(fā)中,我們?yōu)榱藢崿F(xiàn)比較美工的UI界面,常常會使用一些漂亮的背景圖片放在Form中或者Panel中,而一個Form中可能有其他好幾個背景,它們的顏色圖案都不太一樣,這樣就會出現(xiàn)閃屏的問題,尤其是在一些性能不好的機器上,很容易看出來。
????? 至于怎么解決,我在網(wǎng)上也找了很久,還是沒有找到比較完美點的解決方案,但是用一些其他的方法可以減少閃屏,也就是說閃屏的效果不明顯,這樣也可以勉強符合要求了,接下來簡介以下幾種方案。
???? 1、不使用圖片作為背景,而用純色替代,如果是這樣的話,也就不會出現(xiàn)閃屏了,但如果UI上有特別要求的,這條路就行不通了。
???? 2、重寫Panel,然后在Panel中添加背景圖片,而不是把背景圖片添加到Form中,重寫的Panel代碼如下:
??????
View Code ?1?????///?<summary>?2?????///?一個Panel類,當設置背景圖片時,控制其不會閃屏
?3?????///?</summary>
?4?????public?class?BackgroundPanel?:?Panel
?5?????{
?6?????????protected?override?void?OnPaintBackground(PaintEventArgs?e)
?7?????????{
?8?????????????return;
?9?????????}
10?
11?????????protected?override?void?OnPaint(PaintEventArgs?e)
12?????????{
13?????????????
14?????????????this.DoubleBuffered?=?true;
15?????????????if?(this.BackgroundImage?!=?null)
16?????????????{
17?????????????????e.Graphics.SmoothingMode?=?System.Drawing.Drawing2D.SmoothingMode.HighQuality;
18?????????????????e.Graphics.DrawImage(this.BackgroundImage,?new?System.Drawing.Rectangle(0,?0,?this.Width,?this.Height),
19?????????????????0,?0,?this.BackgroundImage.Width,?this.BackgroundImage.Height,
20?????????????????System.Drawing.GraphicsUnit.Pixel);
21?????????????}
22?????????????base.OnPaint(e);
23?????????}
24?????}
??? 3、使用Form的雙緩存可以減少閃屏,但效果不明顯,可以在Form的Load事件里添加以下代碼
???????
View Code 1?this.SetStyle(ControlStyles.AllPaintingInWmPaint,?true);2?this.SetStyle(ControlStyles.DoubleBuffer,?true);
3?this.SetStyle(ControlStyles.UserPaint,?true);
4?this.SetStyle(ControlStyles.ResizeRedraw,?true);
?
????
轉載于:https://www.cnblogs.com/liubiaocai/archive/2011/07/19/2110248.html
總結
以上是生活随笔為你收集整理的winform闪屏问题解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AS3 in FlashDevelop
- 下一篇: 高性能网站建设的14个原则(转载)