繁体   English   中英

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

[英]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)

这是通常发生的情况: 无需更改标签底色。 改变背景色。

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

如果将alpha保持在255,则效果消失。

int A = 255;

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

相反,它可以使背景发光到某种程度,因此其外观会随环境而变化。

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

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

请注意,整个问题背后的原因是:a)Winforms实现其“透明度”的可恶方式,以及b) “环境财产规则”。

现在,它从父级复制背景,以向子级控件提供有关如何绘制自身的信息。 因此,“透明”标签实际上是将TabPage的半透明颜色作为其父级,然后将其与从同一父级中获得的相同颜色组合为环境颜色。

这意味着颜色会堆叠在一起。 这与使用半透明笔刷绘画的效果相同:叠加的笔触越多,彩色显示就越多,透明度就会消失。

除了最后的注释:实现堆叠半透明的方法不是给定的自然选择。 如果您查看Photoshop图层模式,则可以看到多种可能的方式,并且如果使用半透明笔刷将图像成像到不透明的颜色上,则还可以定义“正确”的结果应该包括增加一些透明度,但这不是gdi +会做什么? 也没有默认的(“正常”)PS层模式; 也不是Winforms控制画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM