【发布时间】:2011-11-22 04:41:49
【问题描述】:
我有一个TextBox,它显示一种颜色作为其背景颜色,并在其文本中显示背景颜色代码。我已将文本颜色设置为Black。
问题是如果用户将颜色设置为Black,那么颜色代码将无法读取。如何以编程方式设置文本颜色,以便在用户选择任何颜色时变得可读?
【问题讨论】:
-
查看this article 和发布的示例。它在 php 中,但这个概念可以很容易地转移到 c# 中。
我有一个TextBox,它显示一种颜色作为其背景颜色,并在其文本中显示背景颜色代码。我已将文本颜色设置为Black。
问题是如果用户将颜色设置为Black,那么颜色代码将无法读取。如何以编程方式设置文本颜色,以便在用户选择任何颜色时变得可读?
【问题讨论】:
您可以为文字使用负色:
Color InvertColor(Color sourceColor) {
return Color.FromArgb(255 - sourceColor.R,
255 - sourceColor.G,
255 - sourceColor.B);
}
保证任何颜色在其负色上或多或少都具有可读性,所以你去吧。这是一种快速而肮脏的反转颜色的方法,您可能还想查看此问题的答案:How do I invert a color?
另一种选择是为黑色文本添加白色光环。这就是人们在 GIS 应用程序中所做的,以确保地图标签在任何表面上都是可读的。光环效果的想法是在黑色文本周围有一个细的白色边框。这样,无论是在白色背景上(边框变得不可见)还是在黑色背景上(边框勾勒出文本的轮廓),文本都是可读的。
有多个关于该主题的教程,例如 this article 或 this SO question(带有 VB.NET 示例)。
当您选择了 Color 时,只需将其分配给您的文本框的 ForeColor 属性,如下所示:
txtColor.ForeColor = mycolor;
【讨论】:
不适用于灰色。
这段代码更实用:
lblCarColor.BackColor = color;
if ((color.B + color.R + color.G) / 3 <= 128)
{
lblCarColor.ForeColor = Color.White;
}
【讨论】: