這次的需求又在考驗我的google跟剪貼程式的能力了ORZ..…這次是希望我能讓TabControl的Tab換色。
其實要實現TabControl的Tab換色並不難,難的是,到處都找不到又簡單又好解決換色之後的灰框問題。
這一塊灰灰的地方讓我找了好久都找不到解法,因為TabControl沒有BackColor可用,後來我想到:如果用Bitmap去填滿他呢?
於是我開始動手嘗試,發現居然可行!
設置方法:
1.DrawMode 改為 OwnerDrawFixed
2.SizeMode 改為 Fixed(看你文字會不會咬住,不會咬住可以略過)
3.在DrawItem事件中加入以下程式碼:
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
StringFormat StrFormat = new StringFormat();
//設定文字樣式
StrFormat.LineAlignment = StringAlignment.Center;//垂直置中
StrFormat.Alignment = StringAlignment.Center;//水平置中
Font New_Font = new System.Drawing.Font("微軟正黑體", 12F);//標籤字體
SolidBrush Brush_Font = new SolidBrush(Color.Black);//標籤字體顏色
SolidBrush Brush_Tab = new SolidBrush(System.Drawing.SystemColors.GradientActiveCaption);//標籤預設顏色
//繪置元件背景
Bitmap Bitmap_TabControl = new Bitmap(tabControl1.Width, tabControl1.Height);
Graphics Graphics_TabControl = Graphics.FromImage(Bitmap_TabControl);
Graphics_TabControl.FillRectangle(new SolidBrush(System.Drawing.SystemColors.GradientActiveCaption), 0, 0, tabControl1.Width, tabControl1.Height);
e.Graphics.DrawImage(Bitmap_TabControl, 0, 0, tabControl1.Width, tabControl1.Height);
//繪製標籤背景
for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
//獲取標籤區域
Rectangle recChild = tabControl1.GetTabRect(i);
//設定標籤顏色要實現的區域
e.Graphics.FillRectangle(Brush_Tab, recChild);
//設定標籤文字&顏色
e.Graphics.DrawString(tabControl1.TabPages[i].Text, New_Font, Brush_Font, recChild, StrFormat);
}
//繪製被選取的標籤背景
if (e.Index == tabControl1.SelectedIndex)
{
Rectangle recChild = tabControl1.GetTabRect(tabControl1.SelectedIndex);
Brush_Tab = new SolidBrush(System.Drawing.SystemColors.ActiveCaption);
e.Graphics.FillRectangle(Brush_Tab, recChild);
e.Graphics.DrawString(tabControl1.TabPages[tabControl1.SelectedIndex].Text, New_Font, Brush_Font, recChild, StrFormat);
}
}
大功告成~
這算是我目前為止做出來算最完美的方案了吧,如果有其他方法會再更新上來。
只是個路過的新手,發文有誤請告知。