【问题标题】:How to change BackColor of Tab?如何更改选项卡的背景颜色?
【发布时间】:2013-04-01 11:57:49
【问题描述】:

我有两个窗体。第一个是名为 main 的 mdiParent 形式。第二个是演示表单,它是主表单的子表单。演示表单具有选项卡式布局。演示表单有一个首选项按钮。当我单击首选项按钮时,会打开一个新表单(“首选项”),要求单击设置颜色按钮。单击该按钮会打开一个对话框结果以更改颜色。当我选择一种颜色时,首选项背景色会发生变化。但 dows 不会更改选项卡式布局('presentation form')背景色。我在 n 层架构中构建这个应用程序。所以帮助我如何更改选项卡的背景色。如果你不明白我的问题,我会上传代码。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      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,9pt,样式 = 粗体

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多