2011-09-21 6 views
2

J'ai un TextBox qui affiche une couleur comme couleur d'arrière-plan et le code de couleur d'arrière-plan dans son texte. J'ai mis la couleur du texte comme Black.Changer la couleur du texte du contrôle en fonction de la couleur de fond du contrôle

Le problème est que si l'utilisateur définit la couleur comme Black alors le code de couleur sera illisible. Comment définir la couleur du texte de manière à ce qu'il devienne lisible lorsque l'utilisateur sélectionne une couleur?

+1

Commander [cet article] (http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php) et l'exemple affiché. C'est en PHP mais le concept peut très facilement être transféré sur C#. –

+1

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

Répondre

5

Vous pouvez utiliser la couleur négative pour le texte:

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

Toute couleur est garanti d'être plus ou moins lisible sur sa couleur négative, donc là vous allez. C'est une manière rapide et sale d'inverser une couleur, vous pouvez également vérifier les réponses à cette question: How do I invert a color?

Une autre option consiste à ajouter un halo blanc au texte noir. C'est ce que les gens font dans les applications SIG pour s'assurer que les étiquettes des cartes sont lisibles sur n'importe quelle surface. L'idée de l'effet de halo est d'avoir une fine bordure blanche autour du texte noir. De cette façon, le texte est lisible que ce soit sur fond blanc (la bordure devient invisible) ou sur fond noir (la bordure délimite le texte).

Il existe plusieurs didacticiels sur le sujet, tels que this article ou this SO question (avec l'exemple VB.NET).

Lorsque vous avez un Color choisi, juste assigner à la propriété ForeColor de votre zone de texte comme celui-ci:

txtColor.ForeColor = mycolor; 
+0

super, j'étais sur le point de poster la même solution, et vous l'avez fait .... agréable, upvote fromme – Sandy

+0

@ utilisateur815600: merci! – Dyppl

0

ne fonctionne pas sur la couleur grise.

Ce code est plus utilisable:

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