本文共 3940 字,大约阅读时间需要 13 分钟。
前期工作:
加载资源文件,双击“Resources.resx" 类型选择Images 【添加资源】——【添加现有文件】 选择需要添加的图片文件,保存即可。 在下面的资源文件夹中即可看到添加的图片列表 **方法一:**重绘标签及背景 新建窗体,命名为"OtherForm.cs" 窗体布局如图: 将【tabControl】控件的【DrawMode】属性修改为”OwnerDrawFixed“ 设计界面变为 tabControl控件的事件属性页,添加【DrawItem】事件 编辑【DrawItem】事件private void tabControl2_DrawItem(object sender, DrawItemEventArgs e) { //加载背景图片 Image imgButton = Properties.Resources.p4; Image imgBJ = Properties.Resources.p5; //绘制主控件的背景 Rectangle Rect = new Rectangle(0, 0, this.tabControl2.Width, this.tabControl2.Height); e.Graphics.DrawImage(imgBJ, Rect); //新建一个StringFormat对象,用于对标签文字的布局设置 StringFormat stringFormat = new StringFormat(); stringFormat.LineAlignment = StringAlignment.Center; // 设置文字垂直方向居中 stringFormat.Alignment = StringAlignment.Center; // 设置文字水平方向居中 SolidBrush bruFont = new SolidBrush(Color.FromArgb(255, 255, 255));// 标签字体颜色 Font font = new System.Drawing.Font("楷体", 10F, FontStyle.Bold);//设置标签字体样式 //绘制标签样式 for (int i = 0; i < tabControl2.TabPages.Count; i++) { //获取标签头的工作区域 Rectangle rec = tabControl2.GetTabRect(i); Rectangle newRect = new Rectangle(rec.Left - 7, rec.Top, rec.Width - 7, rec.Height); //绘制标签头背景颜色 e.Graphics.DrawImage(imgButton, newRect); //绘制标签头的文字 e.Graphics.DrawString(tabControl2.TabPages[i].Text, font, bruFont, newRect, stringFormat); } }
运行结果
**方法二:**重写TabControl控件 重写TabControl控件可以改变其背景为透明或绘制背景图,绘制标签风格等各种,但是在X64编辑环境下,重写的控件无法直接拖拽到界面进行设计,需要在修改”main.Designercs"中修改代码。 新建窗体,命名为"main.cs" 窗体布局如图: 在main.cs文件中加入以下代码public class TabControlEx : TabControl { private Color _BackColor; //背景颜色 public TabControlEx() { this.SetStyle(ControlStyles.UserPaint, true);//用户自己绘制 this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); // this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); //让控件支持透明色 this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.UpdateStyles(); } public override Color BackColor { //重写backcolor属性 get { return this._BackColor; } set { this._BackColor = value; } } protected override void OnPaint(PaintEventArgs e) { this.DrawTitle(e.Graphics); base.OnPaint(e); } protected virtual void DrawTitle(Graphics g) { Image imgButton = Properties.Resources.p; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; Font font = new System.Drawing.Font("微软雅黑", 10F, FontStyle.Bold);//设置标签字体样式 using (SolidBrush sb = new SolidBrush(Color.FromArgb(127, 0, 0, 0))) { for (int i = 0; i < this.TabPages.Count; i++) { Rectangle rect = this.GetTabRect(i); Rectangle newRect = new Rectangle(rect.Left + 7, rect.Top, rect.Width - 7, rect.Height); g.DrawImage(imgButton, newRect); g.DrawString(this.TabPages[i].Text, font, Brushes.White, rect, sf); } } } }注:上面有些代码是不需要的,是其他功能的。 在main.Designer.cs中将原来的this.tabControl = new System.Windows.Forms.TabControl();改为this.tabControl = new TabControlEx(); 程序运行结果:
转载地址:http://lnabi.baihongyu.com/