C# 如何更改选项卡的背景色?

C# 如何更改选项卡的背景色?,c#,winforms,C#,Winforms,我有两张windows窗体。第一个是名为main的父窗体。第二种是呈现形式,它是主体形式的子形式。呈现表单具有选项卡式布局。演示窗体有一个“首选项”按钮。当我点击preferences按钮时,一个新表单(“prefs”)打开,要求点击set color按钮。单击该按钮将打开一个对话框Result以更改颜色。当我选择一种颜色时,prefs背景颜色会改变。但dows不会更改选项卡式布局(“演示表单”)的背景色。我正在n层架构中构建这个应用程序。那么,请帮助我如何更改选项卡的背景色。如果您不理解我的问

我有两张windows窗体。第一个是名为main的父窗体。第二种是呈现形式,它是主体形式的子形式。呈现表单具有选项卡式布局。演示窗体有一个“首选项”按钮。当我点击preferences按钮时,一个新表单(“prefs”)打开,要求点击set color按钮。单击该按钮将打开一个对话框Result以更改颜色。当我选择一种颜色时,prefs背景颜色会改变。但dows不会更改选项卡式布局(“演示表单”)的背景色。我正在n层架构中构建这个应用程序。那么,请帮助我如何更改选项卡的背景色。如果您不理解我的问题,我将上载代码。

选项卡控件没有显示BackColor属性,因为它们通常基于当前窗口系统主题绘制

这通常是不值得的,但是TabControl有一个DrawMode属性,您可以在DrawItem事件中自己绘制选项卡


每个单独的TabPage控件都有可用的BackColor属性。

这是我的自定义事件处理程序,我必须创建一个环绕文本的彩色框。选择的选项卡是一种颜色,未选择的选项卡是另一种颜色

private void ChangeTabColor(Object sender, DrawItemEventArgs e)
{
    Font TabFont;
    Brush BackBrush;// = new SolidBrush(Color.Green); //Set background color
    Brush ForeBrush = new SolidBrush(Color.Black);//Set foreground color
    Brush borderBrush = new SolidBrush(Color.Black);//Set foreground color

    if (e.Index == this.tabMain.SelectedIndex)
    {
        TabFont = new Font(e.Font, FontStyle.Bold);
        BackBrush = new SolidBrush(Color.MediumSeaGreen); //Set background color
        //ForeBrush = new SolidBrush(Color.Black);//Set foreground color
    }
    else
    {
        TabFont = e.Font;
        BackBrush = new SolidBrush(Color.LightSteelBlue); //Set background color
        //ForeBrush = new SolidBrush(Color.Yellow);//Set foreground color
    }

    string TabName = this.tabMain.TabPages[e.Index].Text;
    StringFormat sf = new StringFormat();
    sf.Alignment = StringAlignment.Center;

    Rectangle r = e.Bounds;

    r = new Rectangle(r.X, r.Y + 5, r.Width, r.Height - 3);

    if (e.Index == this.tabMain.SelectedIndex)
    {
        Pen rectPen = new Pen(borderBrush, 1.0f);
        r.Y -= 2;
        r.X += 3;
        r.Height -= 9;
        r.Width -= 8;
        e.Graphics.FillRectangle(BackBrush, r);
        e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf);
        e.Graphics.DrawRectangle(rectPen, r);
    }
    else
    {
        Pen rectPen = new Pen(borderBrush, 1.0f);
        r.Y -= 2;
        r.Height -= 4;
        r.Width -= 2;
        e.Graphics.FillRectangle(BackBrush, r);
        e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf);
        e.Graphics.DrawRectangle(rectPen, r);
    }
    //Dispose objects
    sf.Dispose();

    if (e.Index == this.tabMain.SelectedIndex)
    {
        TabFont.Dispose();
        BackBrush.Dispose();
    }
    else
    {
        BackBrush.Dispose();
        ForeBrush.Dispose();
    }
}
当然,“tabMain”指的是选项卡控件名。我希望这有助于您尝试执行的操作…可能有点花哨,但代码没有那么难,而且我认为它看起来更干净…此外,为了做到这一点,我确保为字体和项目大小设置适当的属性:

字体=Arial,9分,样式=粗体

ItemSize=95,25 …高度是重要的部分,只要将SizeMode设置为Normal