根据控件的背景颜色更改控件的文本颜色

时间:2011-09-21 17:59:33

标签: c# .net vb.net

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

不使用灰色。

此代码更有用:

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