为什么.Color无法在.NET中对TabControl起作用?

时间:2020-03-05 18:54:38  来源:igfitidea点击:

如果将.NET中的标准选项卡控件用于选项卡页面,并尝试稍微改变外观,则可以更改选项卡页面的背景色,但不能更改选项卡控件的背景色。该属性可用,我们可以对其进行设置,但无效。如果我们更改页面的背景色而不是选项卡控件的背景色,则看起来非常丑陋。

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

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

不为此控件支持BackColor的原因是什么?我们要解决此问题的解决方案是什么?有比覆盖绘画方法更好的解决方案吗?

解决方案

回答

一种解决方案是:
http://rajeshkm.blogspot.com/2006/07/how-to-change-color-of-tab-control-in.html

回答

该选项卡的背景色似乎由操作系统的"显示属性"控制。特别是外观标签下的Windows和按钮属性(Windows XP)。设置为Windows经典样式时,选项卡不会更改颜色。设置为Windows XP样式时,选择后至少从灰色变为白色。因此,无法控制背景颜色是一个功能!

回答

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)

...

基本上,我们需要将最后一个选项卡的右侧制成的矩形放到选项卡控件的右侧,然后将其填充为所需的颜色。

回答

谢谢,劳拉。我们帮助我走上了正确的路。我已经找到了Oskar提供的链接,但最后并没有为脱衣舞娘做任何事情。

最后,我必须作一些更改,因为我需要表单上的背景图像流血,或者如果父项是没有背景图像的东西,则为背景色。我还需要图标来显示它们是否存在。我对TabControl BackColor修复文章中的所有代码进行了完整的撰写。