【问题标题】:Why doesn't BackColor work for TabControls in .NET?为什么 BackColor 不适用于 .NET 中的 TabControls?
【发布时间】:2008-09-15 21:44:05
【问题描述】:

如果您将 .NET 中的标准选项卡控件用于选项卡页并尝试稍微更改外观,那么您可以更改选项卡页的背景颜色,但不能更改选项卡控件。该属性可用,您可以设置它但它没有效果。如果您更改页面的背景颜色而不是选项卡控件的背景颜色,它看起来......嗯,很丑。

我知道微软不希望它被设置。 MSDN: '此属性支持 .NET Framework 基础结构,不能直接从您的代码中使用。此成员对此控件没有意义。' 仅用于支持 .NET 基础结构的颜色的控件属性? ...难以置信。

多年来,我希望微软会改变它,但他们没有。我创建了自己的 TabControl 类,它覆盖了 paint 方法来解决这个问题。但这真的是最好的解决方案吗?

这个控件不支持BackColor的原因是什么?你有什么解决方案来解决这个问题?有没有比重写paint方法更好的解决方案?

【问题讨论】:

  • 问 MS 为什么做某事有点难以回答。你应该改写你的问题。

标签: .net controls tabcontrol


【解决方案1】:

Rajesh 博客中的解决方案确实很有用,但它只为控件的选项卡部分着色。就我而言,我在不同颜色的背景上有一个 tabcontrol。选项卡本身是灰色的,这不是问题,但选项卡右侧的区域显示为灰色条带。

要将此颜色更改为背景颜色,您需要将以下代码添加到 DrawItem 方法(如 Rajesh 的解决方案中所述)。我正在使用 VB.Net:

...

Dim r As Rectangle = tabControl1.GetTabRect(tabControl1.TabPages.Count-1)
Dim rf As RectangleF = New RectangleF(r.X + r.Width, r.Y - 5, tabControl1.Width - (r.X + r.Width), r.Height + 5)
Dim b As Brush = New SolidBrush(Color.White)
e.Graphics.FillRectangle(b, rf)

...

基本上,您需要将由最后一个选项卡的右侧组成的矩形添加到选项卡控件的右侧,然后将其填充为您想要的颜色。

【讨论】:

    【解决方案2】:

    标签的背景颜色似乎由操作系统的显示属性控制。特别是在外观选项卡下,Windows 和按钮属性 (Windows XP)。当设置为 Windows 经典样式时,选项卡永远不会改变颜色。当设置为 Windows XP 样式时,它至少会在选中时从灰色变为白色。所以不能控制背景颜色是一个特性!

    【讨论】:

      【解决方案3】:

      谢谢,劳拉。你帮助我走上了正轨。我已经找到了 Oskar 提供的链接,但最后并没有为该地带做任何事情。

      最后,我不得不进行相当多的更改,因为我需要表单上的背景图像来渗透,或者如果父级是没有背景图像的东西,则需要背景色。我还需要图标来显示它们是否存在。我的TabControl BackColor fix post 中的所有代码都有完整的记录。

      【讨论】:

      • 非常感谢您保留该博客文章。哦等等,不,你没有。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2021-05-03
      • 2021-12-24
      • 1970-01-01
      • 2013-05-23
      • 2013-03-21
      • 1970-01-01
      相关资源
      最近更新 更多