【问题标题】:How do i change the colour of a tabpage and label in sync如何同步更改标签页和标签的颜色
【发布时间】:2017-11-29 13:47:31
【问题描述】:

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

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

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.

【问题讨论】:

  • “标签页和背景颜色同步”?你是说标签页的颜色吗?你的意思是只改变一个控件的颜色……对吧?
  • 我漏掉了一个字。
  • 为什么,不是 Label.BackColor == Color.Transparent 吗??
  • 是的,但它会做一些奇怪的事情,比如图片 1
  • 您会看到控件轮到自己绘制。绘制事件一次引发一个。摆脱工件需要合成,双缓冲整个窗口而不仅仅是控件。 That is easy to do.

标签: c# winforms visual-studio colors transparency


【解决方案1】:

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

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

int A = 255;

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

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

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

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

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

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

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

最后一点,顺便说一句:实现堆叠半透明的方式不是给定的自然选择。如果您查看 Photoshop 图层模式,您可以看到多种可能的方式,如果您使用半透明画笔将绘画成像到不透明的颜色上,还可以定义“正确”的结果应该包括添加一些透明度,但这不是gdi+ 做什么;也不是默认(“正常”)PS图层模式;也不是 Winforms 控件绘画..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多