如何同步更改标签页和标签的颜色

How do i change the colour of a tabpage and label in sync

我想知道如何同步更改标签页的颜色和标签背景色。

我在定时器中使用的代码是

Random rand = new Random();
int A = rand.Next(0, 255);
int R = rand.Next(0, 255);
int G = rand.Next(0, 255);
int B = rand.Next(0, 255);
tabPage1.BackColor = Color.FromArgb(A, R, G, B)

这是正常情况:without changing the label back colour. changing the back colour.

原因是您同时更改了 RBG 通道和 Alpha 通道。

如果将 alpha 保持在 255,效果就会消失..:[=​​12=]

int A = 255;

要理解你必须考虑到半透明颜色不是一个独立的实体。

相反,它让背景在一定程度上发光,因此它的外观会随着环境而变化。

但是标签页和标签的背景不同:标签的背景是标签页,但标签页的背景(可能)是表单。

如果您在该面板中添加一个面板和另一个标签,您可以看到该面板将具有与第一个标签相同的阴影,但面板中的第二个标签具有比现在更深的阴影正在使用 rgb 颜色。

请注意,整个问题背后的原因是 a) Winforms 实现其 'tranparency' 的可疑方式和 b) 'ambient property 规则。'

现在它从父控件复制背景,为子控件提供有关如何绘制自身的信息。所以 'transparent' Label 实际上获取 TabPage 的半透明颜色作为其父级,然后将其与从相同父级获得的相同颜色作为环境颜色组合。

这意味着颜色是自己叠加的;这与使用半透明画笔绘画的效果相同:叠加的笔触越多,颜色显示的越多,透明度就会消失..

最后一点,除了:堆叠半透明的实现方式不是给定的、自然的选择。如果您查看 photoshop 图层模式,您可以看到多种可能的方式,如果您使用半透明画笔将绘画成像到不透明颜色上,还可以定义 'right' 结果应该涉及添加一些透明度,但是这不是 gdi+ 所做的;也不是默认的 ('normal') PS 图层模式;也不是 Winforms 控制绘画..