在界面設計中,TableControl控件經常使用。默認設置中,TabControl的背景和標簽樣式。接下來我們將學習如何修改TableControl的標簽選項、修改TabControld的背景色或背景圖片。頁面效果如下:
簡述原理
TableControl項目屬性DrawMode,將屬性值設定為OwnerDrawFixed后,就可以由用戶繪制標簽。添加DrawItem事件(用戶需要繪制Table時觸發),然后在該方法中繪制自定義的標簽即可。
關鍵代碼
設置DrawMode屬性。
1 this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
為TabControl添加DrawItem事件。
1 this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
設置筆刷。
1 //設置筆刷 2 SolidBrush red = new SolidBrush(Color.Red); // 紅色
繪制背景。
1 //繪制紅色背景 2 Rectangle rectangleRed = tabControl_main.GetTabRect(0); 3 e.Graphics.FillRectangle(red, rectangleRed);
設置文字對齊屬性。
1 //設置文字居中對齊 2 StringFormat stringFormat = new StringFormat(); 3 stringFormat.Alignment = StringAlignment.Center;
設置標簽文本。
1 //設置文字字體和文字大小 2 e.Graphics.DrawString(tabControl_main.TabPages[i].Text , new Font("宋體",10) ,black ,rec , stringFormat);
獲取工作區域
1 Rectangle recMain = tabControl_main.ClientRectangle; //獲取Table控件的工作區域
添加背景圖片
1 //獲取背景圖片,我的背景圖片在項目資源文件中。 2 Image backImage = Resources.bg_banner; 3 //繪制主控件的背景 4 e.Graphics.DrawImage(backImage, 0, 0, tabControl_main.Width, tabControl_main.Height);
步驟
設置標簽
- 在WinForm頁面添加TableControl控件,完成基本的設置。這里設置TableControl控件名稱為tabControl_main,並添加三個選項卡,選項卡的關聯文本分別為紅色、黃色、藍色。

- 設置DrawMode為OwnerDrawFixed。DrawMode屬性的含義為指示是由用戶還是由系統繪制標題。由於需要自定義標簽背景色,所以由用戶來繪制標題。
在頁面中設置tabControl_main中設置DrawMode屬性。

或者*.Designer.cs文件中,設置DrawMode屬性。
1 this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
- 為TabControl添加DrawItem事件(每當需要繪制特定項/特定區域時發生)。

或者在*.Designer.cs頁面代碼如下:
1 this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
- 設置背景標簽。包括設置筆刷、繪制背景、設置文字。代碼如下:
1 using System.Drawing; 2 using System.Windows.Forms; 3 //…… 4 /// <summary> 5 /// 初始化tableControl選項時的顏色 6 /// </summary> 7 /// <param name="sender"></param> 8 /// <param name="e"></param> 9 private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e) 10 { 11 //設置筆刷 12 SolidBrush red = new SolidBrush(Color.Red); // 紅色 13 SolidBrush yellow = new SolidBrush(Color.Yellow); //黃色 14 SolidBrush blue = new SolidBrush(Color.Blue); //藍色 15 SolidBrush black = new SolidBrush(Color.Black); //黑色 16 //設置背景 17 //繪制紅色背景 18 Rectangle rectangleRed = tabControl_main.GetTabRect(0); 19 e.Graphics.FillRectangle(red, rectangleRed); 20 //繪制黃色背景 21 Rectangle rectangleYellow = tabControl_main.GetTabRect(1); 22 e.Graphics.FillRectangle(yellow, rectangleYellow); 23 //繪制黃色背景 24 Rectangle rectangleBlue = tabControl_main.GetTabRect(2); 25 e.Graphics.FillRectangle(blue, rectangleBlue); 26 //設置標簽文字居中對齊 27 StringFormat stringFormat = new StringFormat(); 28 stringFormat.Alignment = StringAlignment.Center; 29 //設置標簽文字 30 for (int i = 0; i <tabControl_main.TabPages.Count; i ++) 31 { 32 Rectangle rec = tabControl_main.GetTabRect(i); 33 //設置文字字體和文字大小 34 e.Graphics.DrawString(tabControl_main.TabPages[i].Text , new Font("宋體",10) ,black ,rec , stringFormat); 35 } 36 37 } 38 //……
- 啟動后運行效果如下:

設置背景色或背景圖片
- 在WinForm頁面添加TableControl控件(這里命名為tabControl_main),默認情況下,可以修改Tab的背景色為上一個容器的顏色。

當修改DrawMode屬性為OwnerDrawFixed時,背景色默認為系統顏色(灰色)。如下圖:

- 設置DrawMode為OwnerDrawFixed。DrawMode屬性的含義為指示是由用戶還是由系統繪制標題。由於需要自定義標簽背景色,所以由用戶來繪制標題。
在頁面中設置tabControl_main中設置DrawMode屬性。

或者*.Designer.cs文件中,設置DrawMode屬性:
1 this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
- 為TabControl添加DrawItem事件(每當需要繪制特定項/特定區域時發生)。

或者在*.Designer.cs頁面代碼如下:
1 this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
- 在tabControl_main_DrawItem中添加背景顏色代碼如下:
1 using System.Drawing; 2 using System.Windows.Forms; 3 //…… 4 private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e) { 5 //…… 6 SolidBrush tab_blackColr = new SolidBrush(Color.Black); // 筆刷背景 7 Rectangle recMain = tabControl_main.ClientRectangle; //獲取Table控件的工作區域 8 e.Graphics.FillRectangle(tab_blackColr , recMain); //繪制TabControl背景 9 //…… 10 } 11 //…
運行效果如下:

- 在tabControl_main_DrawItem中添加背景圖片代碼如下:
1 using System.Drawing; 2 using System.Windows.Forms; 3 //…… 4 private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e) { 5 //…… 6 //獲取背景圖片,我的背景圖片在項目資源文件中。 7 Image backImage = Resources.bg_banner; 8 //繪制主控件的背景 9 e.Graphics.DrawImage(backImage, 0, 0, tabControl_main.Width, tabControl_main.Height); 10 //…… 11 } 12 //……
運行效果如下:
參考網址
[1] https://jingyan.baidu.com/article/8ebacdf0caf35649f75cd562.html
[2] https://www.cnblogs.com/jfbloc/archive/2011/11/12/2246549.html
