2011-09-21 127 views
2

我有一个TextBox,它在其文本中显示一种颜色作为其背景颜色和背景颜色代码。我已将文字颜色设置为Black根据控件的背景颜色更改控件的文本颜色

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

+1

查核[本文](http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php)和贴的例子。这是在PHP中,但这个概念可以很容易地转移到C#。 –

+1

http://stackoverflow.com/questions/1165107/how-do-i-invert-a-colour/1165145#1165145 –

回答

5

您可以使用否定色彩的文字:

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; 
+0

太棒了,我即将发布相同的解决方案,你做到了......不错, upvote fromme – Sandy

+0

@ user815600:谢谢! – Dyppl

0

灰色的颜色不工作。

此代码是更有用的:

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