Plusieurs couleurs dans un C# .NET label
Je suis à la recherche d'un moyen d'afficher plusieurs couleurs dans un seul C#/.NET label. E. g l'étiquette est l'affichage d'une série de csv valeurs séparées que chacun prennent une couleur en fonction d'un seau, elles tombent. Je préfère ne pas utiliser d'étiquettes multiples, ainsi que les valeurs sont de longueur variable et je ne veux pas jouer avec des mises en pages dynamiques. Est-il un support natif pour cela?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de contrôle natif de .NET qui fait cela. Votre meilleur pari est d'écrire votre propre UserControl (appeler RainbowLabel ou quelque chose). Normalement vous devriez avoir une étiquette personnalisée de contrôle hérite directement à partir de l'Étiquette, mais puisque vous ne pouvez pas obtenir de multi-couleur de texte dans un label, vous héritez de UserControl.
Pour le rendu du texte, votre UserControl pourrait diviser le texte sur des virgules, puis de charger dynamiquement une différente couleur de l'Étiquette de chaque morceau. Une meilleure façon, cependant, serait de rendre le texte directement sur votre UserControl en utilisant le Cordon de serrage et MeasureString méthodes dans le Graphique de l'espace de noms.
Écrit UserControls dans .NET est vraiment pas difficile, et ce genre de problème inhabituel est exactement ce que la coutume UserControls sont pour.
Mise à jour: voici une méthode simple que vous pouvez utiliser pour le rendu de la multi-couleur de texte sur une PictureBox:
Évidemment, cela ne fonctionnera plus si vous avez plus de 4 délimité par des virgules éléments dans votre texte, mais vous obtenez l'idée. Aussi, il semble y avoir un petit bug dans l'MeasureString qui rend le retour d'une largeur de quelques pixels plus large que nécessaire, de sorte que le multi de couleur chaîne est tendue - vous pourriez vouloir tordre la partie.
Il devrait être très simple de modifier ce code pour un UserControl.
Note: TextRenderer est la meilleure classe à utiliser pour le dessin et la mesure de cordes, puisqu'il utilise les services de renseignements. Les graphiques.Cordon de serrage et .MeasureString utiliser des flotteurs, de sorte que vous aurez tout-en-un-pixel erreurs ici et là.
Mise à jour: Oublier sur l'utilisation de TextRenderer. C'est chien lent.
Control
pourrait faire plus de sens que deUserControl
si le contrôle est de dessiner lui-même.Vous pouvez essayer d'utiliser un RichTextBox, de sorte que vous pouvez obtenir plusieurs couleurs pour la chaîne et la mettre en lecture seule et supprimer la bordure. Changer la couleur d'arrière-plan de la même façon que la Forme, c'est sur et vous pourriez sortir avec elle.
Comme alternative, vous pourriez faire ce que le format rtf ou html dans un contrôle adéquat (comme WebBrowser). Il serait sans doute prendre un peu plus de ressources que vous auriez l'idéal, mais ça va marcher assez rapidement.
Color color = this.BackColor; string text = string.Format("<style> body {{ background-color: rgb({0},{1},{2}) }}</style> Hello, <b>every</b><i>one</i>!</div>", color.R, color.G, color.B); webBrowser1.DocumentText = text;
avecwebBrowser1.ScrollBarsEnabled = false;
en faire une grande.Si vous construisez votre application Windows pour les personnes avec XP, vous pouvez utiliser WPF. Même si c'est une application Windows Forms, vous pouvez ajouter un WPF UserControl.
Que je ne puis l'utilisation d'une Étiquette, et définir le "premier plan", propriété d'être un dégradé de couleurs.
Ou, dans les Windows Forms (pas de WPF), vous pouvez simplement utiliser un Flux "Panneau de configuration", puis dans une boucle for ajouter plusieurs Étiquettes comme des segments de votre sentense... ils seront tous "flux" comme si c'était une étiquette.
Légèrement hors sujet ... Vous pouvez le vérifier aussi:
Je suis en utilisant des étiquettes assez souvent pour marquer des mots clés dans la couleur rouge, etc.
Comme dans Phil Wright réponse-je utiliser un contrôle RichTextBox, supprimer la bordure et définir la couleur d'arrière-plan à SystemColors.De contrôle.
Pour écrire du texte en couleur le contrôle est d'abord débarrassée puis-je utiliser cette fonction pour ajouter du texte en couleur:
Si vous souhaitez exécuter cette fonction avec "mono", puis ajouter un espace avant chaque nouvelle couleur de texte, ou mono n'allons pas définir de nouveaux la couleur correctement. Ce n'est pas nécessaire avec .NET
Utilisation:
Vous pouvez simplement utiliser plusieurs étiquettes. Définir les propriétés de la police que vous voulez et puis la gauche. en haut et en largeur propriétés pour afficher les mots que vous souhaitez affichées différemment. C'est en supposant que vous utilisez windows forms.
Essayer cela,
Il n'y a pas de support natif pour cela; vous devrez utiliser plusieurs étiquettes ou trouver un 3ème contrôle du parti qui va fournir cette fonctionnalité.
Je ne le pense pas. Vous devez en créer une vous-même.
Que par votre Question votre exigence est simple comme
lable.Text = "This color is Red"
, Donc il faut afficher ce texte"La couleur est" sera en Bleu et "Rouge" sera de couleur rouge ..
Cela peut être fait comme ceci