WinForm界面设计优化过程
以在做的項目為例,記錄一下界面美化過程中遇到的問題,由于項目是先做出來之后,又請美工進行稍微調整設計界面,所以會又些限制
1. TabControl的問題----在添加了背景圖片后,TabControl的標簽不能添加背景圖片,背景不可以設置。
針對這個問題,網上有兩種解決方法:參考:https://blog.csdn.net/sinat_29136193/article/details/80652443
a) 重繪TabControl----設置DrawMode屬性為OwnerDrawFixed,然后添加事件DrawItem,但是對于性能方面不知是否影響大。在重繪了標簽和背景后,又對Page背景為與總背景一直進行設置,但是,下面的重寫控件可以設置為透明度,直接,省去一些麻煩。
? ? ? ?b) 重寫方法雖然可以用,在界面Designer.cs中修改this.TabControl=new TabControlEx();調用成功,但是在x64位編譯后,不能直接拖控件到界面上,不知是何原因。
但是重寫方法可以啟用TControl透明等各種,但是在設置了頁面透明后,最后發現頁面加載控件比較卡,未設置透明的頁面不卡。不知具體原因
2. GroupBox邊框問題----在項目中,原本使用GroupBox進行排版,現在美化界面設置背景圖片后,GroupBox又很明顯的邊框,看起來不太好看。
解決歷程:首先找去邊框方法,網上提供方法重寫方法OnPaint()
private void groupBox10_Paint(object sender, PaintEventArgs e){e.Graphics.Clear(this.BackColor); }?測試之后,發現,GroupBox直接連背景圖片都變成白色的了,果斷放棄;之后采用Panel替換GroupBox,設置背景圖片,不存在任何邊框問題。
3. 最主要的問題是在整體都布局設置好之后,運行程序發現卡的要命。網上查找資料總結參考:https://www.cnblogs.com/kest/p/4683012.html。
? ? ? CreateParams重載之后,頁面是等待所有控件都完全加載好之后,啪的一下全出來,其中有一個等待過程,后面經分析,是TabControl頁面設置透明導致等待時間過長。最后決定不再使用TabControl,直接添加按鈕跳轉頁面,也不至于有這么多問題。
4. 在解決問題過程中,重寫Panel控件,將界面中所有Panel換成重寫的Panel,代碼如下,第一天測的時候,由于控件加載比較慢,所以看到了控件加載的過程,背景圖片是加了一層又一層,特別混亂,例如,Label本沒有背景圖,卻顯示其他控件的圖片作為背景,很亂,所以沒有采用這樣的改善方法。但是,等到最后,我又重新還是一樣的用重寫的Panel時,卻是好好的,奇怪了,不懂為什么。
1 public class PanelEx : Panel 2 { 3 public PanelEx() 4 { 5 this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); 6 this.UpdateStyles(); 7 } 8 protected override void OnPaint(PaintEventArgs e) 9 { 10 // 使用雙緩沖 11 this.DoubleBuffered = true; 12 // 背景重繪移動到此 13 if (this.BackgroundImage != null) 14 { 15 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 16 e.Graphics.DrawImage( 17 this.BackgroundImage, 18 new System.Drawing.Rectangle(0, 0, this.Width, this.Height), 19 0, 20 0, this.BackgroundImage.Width, this.BackgroundImage.Height, System.Drawing.GraphicsUnit.Pixel); 21 } 22 base.OnPaint(e); 23 //this.BackgroundImage = null; 24 } 25 }?
轉載于:https://www.cnblogs.com/Betty-IT/p/9152782.html
總結
以上是生活随笔為你收集整理的WinForm界面设计优化过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Codeforces】Round #4
- 下一篇: mysql基础(二)—— 简单sql