C# WinForm 修改TableControl背景和標簽


  在界面設計中,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM