C# WinForm TabControl选项卡风格自定义绘制

本文介绍了如何在WindowsForms中通过修改TabControl的DrawMode属性为OwnerDrawFixed,并利用DrawItem事件来实现对TabPage的风格自定义绘制,包括背景颜色、选中状态和文本显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改TabControl控件DrawMode属性为OwnerDrawFixed。

使用TabControl控件DrawItem事件实现选项卡风格自定义绘制功能。

private void TabControlDrawTabPage(object sender, DrawItemEventArgs e)
{
    TabControl tabControl = (TabControl)sender;
    Font tabPageFont = new Font("微软雅黑", 13, FontStyle.Bold, GraphicsUnit.Pixel); ;
    Brush tabPageBackBrush = new SolidBrush(Color.FromArgb(171, 171, 171));
    Brush tabPageFontBrush = new SolidBrush(Color.White);
    Brush selectedTabPageBackBrush = new SolidBrush(Color.FromArgb(100, 100, 100));
    Brush selectedTabPageFontBrush = new SolidBrush(Color.White);
    Brush tabControlBackBrush = new SolidBrush(Color.FromArgb(171, 171, 171));
    Pen borderPen = new Pen(Color.FromArgb(0, 0, 0));
    StringFormat stringFlags = new StringFormat(StringFormatFlags.DirectionRightToLeft);
    stringFlags.Alignment = StringAlignment.Center;
    stringFlags.LineAlignment = StringAlignment.Center;


    e.Graphics.FillRectangle(tabControlBackBrush, tabControl.ClientRectangle.X, tabControl.ClientRectangle.Y, tabControl.ClientRectangle.Size.Width, tabControl.ClientRectangle.Height);

    for (int i = 0; i < tabControl.TabPages.Count; i++)
    {
        Rectangle tabPageRectangle = tabControl.GetTabRect(i);

        if (tabControl.TabPages[i] != tabControl.SelectedTab)
        {
            e.Graphics.FillRectangle(tabPageBackBrush, tabPageRectangle);
            e.Graphics.DrawString(tabControl.Controls[i].Text, tabPageFont, tabPageFontBrush, tabPageRectangle, stringFlags);
        }
        else
        {
            e.Graphics.FillRectangle(selectedTabPageBackBrush, tabPageRectangle);
            e.Graphics.DrawString(tabControl.Controls[i].Text, tabPageFont, selectedTabPageFontBrush, tabPageRectangle, stringFlags);
        }

        e.Graphics.DrawRectangle(borderPen, tabPageRectangle);
    }

    tabPageBackBrush.Dispose();
    tabPageFont.Dispose();
    tabPageFontBrush.Dispose();
    tabControlBackBrush.Dispose();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值