WinForm界面設計優化過程

  以在作的項目爲例,記錄一下界面美化過程當中遇到的問題,因爲項目是先作出來以後,又請美工進行稍微調整設計界面,因此會又些限制html

1. TabControl的問題----在添加了背景圖片後,TabControl的標籤不能添加背景圖片,背景不能夠設置。ide

  針對這個問題,網上有兩種解決方法:參考:https://blog.csdn.net/sinat_29136193/article/details/80652443佈局

  a) 重繪TabControl----設置DrawMode屬性爲OwnerDrawFixed,而後添加事件DrawItem,可是對於性能方面不知是否影響大。在重繪了標籤和背景後,又對Page背景爲與總背景一直進行設置,可是,下面的重寫控件能夠設置爲透明度,直接,省去一些麻煩。性能

       b) 重寫方法雖然能夠用,在界面Designer.cs中修改this.TabControl=new TabControlEx();調用成功,可是在x64位編譯後,不能直接拖控件到界面上,不知是何緣由。測試

    可是重寫方法能夠啓用TControl透明等各類,可是在設置了頁面透明後,最後發現頁面加載控件比較卡,未設置透明的頁面不卡。不知具體緣由this

2. GroupBox邊框問題----在項目中,本來使用GroupBox進行排版,如今美化界面設置背景圖片後,GroupBox又很明顯的邊框,看起來不太好看。spa

  解決歷程:首先找去邊框方法,網上提供方法重寫方法OnPaint().net

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。code

      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     }
相關文章
相關標籤/搜索