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

时间:2017-06-26 16:38:37

标签: c# winforms visual-studio colors transparency

我想知道如何更改标签页的颜色并同步标记颜色。

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

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.

1 个答案:

答案 0 :(得分:0)

原因是您正在更改RBG频道和Alpha频道。

如果你将alpha保持在255,效果会消失..:

int A = 255;

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

相反,它让背景在某种程度上闪耀,因此它的外观随环境而变化。

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

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

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

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

这意味着颜色堆叠在自身上;这与使用半透明画笔绘画的效果相同:覆盖的笔画越多,彩色显示和透明度就会消失。

最后的注释,除了:实现堆叠半透明的方式不是一个给定的,自然的选择。如果你看看photoshop图层模式,你可以看到各种各样的可能方式,如果你想象用半透明画笔绘制到不透明的颜色,你也可以定义“正确的”。结果应该包括添加一些透明度,但这不是gdi +所做的;也不是默认的('普通')PS层模式;也不是Winforms控制画..