重点: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<Bitmap> list = new List<Bitmap>(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# WinForm应用中解决TabControl控件的背景颜色问题并设置标签的背景图片。通过设置DrawMode为OwnerDrawFixed,然后注册DrawItem事件,实现自定义绘制Tab页标题,从而改变控件的视觉效果。
7755

被折叠的 条评论
为什么被折叠?



