【问题标题】:Change Control's Text Color Depending on Control's Background Color根据控件的背景颜色更改控件的文本颜色
【发布时间】:2011-11-22 04:41:49
【问题描述】:

我有一个TextBox,它显示一种颜色作为其背景颜色,并在其文本中显示背景颜色代码。我已将文本颜色设置为Black

问题是如果用户将颜色设置为Black,那么颜色代码将无法读取。如何以编程方式设置文本颜色,以便在用户选择任何颜色时变得可读?

【问题讨论】:

标签: c# .net vb.net


【解决方案1】:

您可以为文字使用负色:

Color InvertColor(Color sourceColor) {
    return Color.FromArgb(255 - sourceColor.R, 
                          255 - sourceColor.G,
                          255 - sourceColor.B);
}

保证任何颜色在其负色上或多或少都具有可读性,所以你去吧。这是一种快速而肮脏的反转颜色的方法,您可能还想查看此问题的答案:How do I invert a color?

另一种选择是为黑色文本添加白色光环。这就是人们在 GIS 应用程序中所做的,以确保地图标签在任何表面上都是可读的。光环效果的想法是在黑色文本周围有一个细的白色边框。这样,无论是在白色背景上(边框变得不可见)还是在黑色背景上(边框勾勒出文本的轮廓),文本都是可读的。

有多个关于该主题的教程,例如 this articlethis SO question(带有 VB.NET 示例)。

当您选择了 Color 时,只需将其分配给您的文本框的 ForeColor 属性,如下所示:

txtColor.ForeColor = mycolor;

【讨论】:

  • 太好了,我正要发布相同的解决方案,而你做到了....很好,来自我的支持
  • 反转颜色不适用于 (127, 127, 127) 灰色。
【解决方案2】:

不适用于灰色。

这段代码更实用:

 lblCarColor.BackColor = color;
 if ((color.B + color.R + color.G) / 3 <= 128)
 {
     lblCarColor.ForeColor = Color.White;
 }

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2012-04-29
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多