TabControl的Tab換色

這次的需求又在考驗我的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);
            }
        }

大功告成~

這算是我目前為止做出來算最完美的方案了吧,如果有其他方法會再更新上來。

只是個路過的新手,發文有誤請告知。