我有一个TextBox
,它在其文本中显示一种颜色作为其背景颜色和背景颜色代码。我已将文字颜色设置为Black
。根据控件的背景颜色更改控件的文本颜色
问题是如果用户将颜色设置为Black
那么颜色代码将是不可读的。如何以编程方式设置文本颜色,以便在用户选择任何颜色时变得可读?
我有一个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;
}
查核[本文](http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php)和贴的例子。这是在PHP中,但这个概念可以很容易地转移到C#。 –
http://stackoverflow.com/questions/1165107/how-do-i-invert-a-colour/1165145#1165145 –