我想知道如何更改标签页的颜色并同步标记颜色。
我在计时器中使用的代码是
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.
答案 0 :(得分:0)
原因是您正在更改RBG频道和Alpha频道。
如果你将alpha保持在255,效果会消失..:
int A = 255;
要理解您必须考虑半透明颜色不是一个独立的实体。
相反,它让背景在某种程度上闪耀,因此它的外观随环境而变化。
但是标签页和标签的背景并不相同:标签的背景是标签页,但标签页的背景是(可能)表格。
如果在该面板中添加一个面板和另一个标签,您可以看到面板与第一个标签具有相同的阴影,但面板中的第二个标签具有更暗的阴影,因为现在更多的rgb正在使用颜色。
请注意,整个问题背后的原因是:a)Winforms实现其透明度的可疑方式'和b)'ambient property规则。'
现在它从父级复制背景,为子控件提供有关如何绘制自身的信息。所以'透明'实际上,将TabPage的半透明颜色标记为其父级,然后将其与从与环境颜色相同的父颜色获得的颜色相结合。
这意味着颜色堆叠在自身上;这与使用半透明画笔绘画的效果相同:覆盖的笔画越多,彩色显示和透明度就会消失。
最后的注释,除了:实现堆叠半透明的方式不是一个给定的,自然的选择。如果你看看photoshop图层模式,你可以看到各种各样的可能方式,如果你想象用半透明画笔绘制到不透明的颜色,你也可以定义“正确的”。结果应该包括添加一些透明度,但这不是gdi +所做的;也不是默认的('普通')PS层模式;也不是Winforms控制画..