如何改变Tab的BackColor?

时间:2013-04-09 20:57:06

标签: c# winforms

我有两个窗体。第一个是名为main的mdiParent表单。第2个是作为主要形式的儿童形状的介绍形式。 presentaion表单有一个标签布局。演示文稿表单有一个偏好按钮。当我点击偏好设置按钮时,会打开一个新表单('prefs'),要求点击设置颜色按钮。单击该按钮可打开dialogResult以更改颜色。当我选择一种颜色时,prefs背景颜色会发生变化。但是dows不会改变选项卡式布局('presentation form')backcolor。我正在构建这个n层架构的应用程序。所以帮助我如何更改选项卡的背景颜色。如果你不理解我的问题,我会上传代码。

2 个答案:

答案 0 :(得分:0)

TabControls没有暴露BackColor属性,因为它们通常基于当前窗口系统主题进行绘制。

通常不值得努力,但TabControl确实有一个DrawMode属性,您可以在DrawItem事件中自己绘制标签。

每个TabPage控件都有一个BackColor属性。

答案 1 :(得分:0)

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

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”是指选项卡控件名称。我希望这有助于你正在尝试做什么...可能有点发烧友,但代码并不那么困难,我认为它看起来更清洁......加上为了做到这一点,我确保设置字体和项目大小的适当属性:

Font = Arial,9pt,style = Bold

ItemSize = 95,25 ...高度是重要的部分,只要你设置SizeMode = Normal