C# winfrom TabConTrol控件背景颜色问题和标签背景图片

重点:tabControl_event_sms.Invalidate();可以触发DrawItem事件。

属性中,并没有直接设置控件的BackImage属性,没办法设置主控件的背景。

第一步:

 设置TabControl控件(名称以tclDemo为例)的DrawMode属性为:OwnerDrawFixed;用于指定由用户来绘制标题

第二步:注册TabControl控件的DrawItem事件:

第三步:

private void tclDemo_DrawItem(object sender, DrawItemEventArgs e)

{

            //获取TabControl主控件的工作区域
            Rectangle rec = tclDemo.ClientRectangle;
            //获取背景图片,我的背景图片在项目资源文件中。
            Image backImage = Resources.枫叶;

            //新建一个StringFormat对象,用于对标签文字的布局设置
            StringFormat StrFormat = new StringFormat();
            StrFormat.LineAlignment = StringAlignment.Center;// 设置文字垂直方向居中
            StrFormat.Alignment = StringAlignment.Center;// 设置文字水平方向居中           

            // 标签背景填充颜色,也可以是图片
         SolidBrush bru = new SolidBrush(Color.FromArgb(72, 181, 250));
            SolidBrush bruFont = new SolidBrush(Color.FromArgb(217, 54, 26));// 标签字体颜色
            Font font = new System.Drawing.Font("微软雅黑",12F);//设置标签字体样式 
            //绘制主控件的背景
            e.Graphics.DrawImage(backImage, 0, 0, tclDemo.Width, tclDemo.Height);
            //绘制标签样式
            for (int i = 0; i < tclDemo.TabPages.Count; i++)
            {
                //获取标签头的工作区域
                Rectangle recChild = tclDemo.GetTabRect(i);
                //绘制标签头背景颜色
                e.Graphics.FillRectangle(bru, recChild);
                //绘制标签头的文字                        
         e.Graphics.DrawString(tclDemo.TabPages[i].Text,font,bruFont,recChild,StrFormat);
            }

}

2、另一种方式

Bitmap image1 = new Bitmap(@"E:\项目练习\WinFormTest\WinFormTest\res\tab_train.ico");
Bitmap image2 = new Bitmap(@"E:\项目练习\WinFormTest\WinFormTest\res\tab_station.ico");
        private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
        {
            //1、设置TabControl背景色
            TabControl tc = sender as TabControl;
            SolidBrush backgroundBlack = new SolidBrush(Color.Azure);//Tab整体背景颜色
            //填充背景色
            Rectangle rec = tc.ClientRectangle;
            e.Graphics.FillRectangle(backgroundBlack, rec);

            Bitmap[] images = { image1, image2 };
            List list = new List(images);
            for (int i = 0; i < tabControl1.TabPages.Count; i++)
            {
                //获取标签头的工作区域 
                Rectangle recChild = tabControl1.GetTabRect(i);
                //绘制标签头背景图片 
                Bitmap image = images[i];
                e.Graphics.DrawImage(image, recChild);
            }
        }

效果下图

C# winfrom TabConTrol控件背景颜色问题和标签背景图片_第1张图片

你可能感兴趣的:(WinFom)