Winform TabControl标签美化

前期工作:
加载资源文件,双击“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();
在这里插入图片描述
在这里插入图片描述
程序运行结果:
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以通过以下几种方法美化 WinFormTabControl: 1. 使用第三方控件库,比如DevExpress、Telerik等,它们提供了很多预先设计好的主题和样式,可以轻松地美化 WinFormTabControl。 2. 使用自定义绘制(OwnerDraw)来绘制 TabControl,自定义绘制可以让我们完全掌控控件的绘制过程,从而实现更加个性化的美化效果。可以通过以下步骤来实现: - 将 TabControl 的 DrawMode 属性设置为 OwnerDrawFixed 或 OwnerDrawVariable。 - 在 TabControl 的 DrawItem 事件中实现自定义绘制代码。 例如,可以在 DrawItem 事件中使用 Graphics 对象绘制一个自定义的 Tab 标签,然后通过 e.Graphics.DrawImage() 方法将绘制结果渲染到 TabControl 中。 3. 使用样式表(StyleSheet)来美化 TabControl,样式表是一种可以自定义控件样式的方法,它可以让我们通过 CSS 类似的语法来设置控件的样式。可以通过以下步骤来实现: - 在项目中添加一个样式表文件(.css)。 - 在样式表中定义一个样式类来设置 TabControl 的样式,例如: ``` .my-tabcontrol { font-family: 'Microsoft Yahei'; font-size: 12px; background-color: #f5f5f5; border: none; } ``` - 在 TabControl 中将 UseVisualStyleBackColor 属性设置为 false,并将 TabControl 和样式类绑定,例如: ``` this.tabControl1.UseVisualStyleBackColor = false; this.tabControl1.TabPages[0].Parent = this.tabControl1; this.tabControl1.TabPages[0].Text = "Page 1"; this.tabControl1.TabPages[0].Name = "Page1"; this.tabControl1.TabPages[0].BackColor = Color.White; this.tabControl1.TabPages[0].ForeColor = Color.Black; this.tabControl1.TabPages[0].UseVisualStyleBackColor = false; this.tabControl1.TabPages[0].Tag = "my-tabcontrol"; ``` 这样就可以实现对 TabControl 的样式进行个性化的设置。 以上是几种常见的美化 WinFormTabControl 的方法,具体选择哪种方法可以根据实际需求和个人喜好来决定。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值