40 Stimmen

Einen Teil des Textes eines Etiketts fett formatieren

Gibt es eine Möglichkeit, einen Teil eines label.text mutig zu sein?

label.text = "asd" + string;

Möchte die string Teil kühn zu sein.

Ist das möglich, wie kann man das machen?

33voto

particle Punkte 3152

Die folgende Klasse veranschaulicht, wie man dies durch Überschreiben von OnPaint() im Label Klasse von WinForms. Sie können es verfeinern. Aber ich habe das Pipe-Zeichen verwendet ( | ) in eine Zeichenkette ein, um dem OnPaint() Methode, um den Text vor der | als Fettdruck und danach als normaler Text.

class LabelX : Label
{
    protected override void OnPaint(PaintEventArgs e) {
        Point drawPoint = new Point(0, 0);

        string[] ary = Text.Split(new char[] { '|' });
        if (ary.Length == 2) {
            Font normalFont = this.Font;

            Font boldFont = new Font(normalFont, FontStyle.Bold);

            Size boldSize = TextRenderer.MeasureText(ary[0], boldFont);
            Size normalSize = TextRenderer.MeasureText(ary[1], normalFont);

            Rectangle boldRect = new Rectangle(drawPoint, boldSize);
            Rectangle normalRect = new Rectangle(
                boldRect.Right, boldRect.Top, normalSize.Width, normalSize.Height);

            TextRenderer.DrawText(e.Graphics, ary[0], boldFont, boldRect, ForeColor);
            TextRenderer.DrawText(e.Graphics, ary[1], normalFont, normalRect, ForeColor);
        }
        else {

            TextRenderer.DrawText(e.Graphics, Text, Font, drawPoint, ForeColor);                
        }
    }
}

So verwenden Sie es:

LabelX x = new LabelX();
Controls.Add(x);
x.Dock = DockStyle.Top;
x.Text = "Hello | World";       

Hallo wird gedruckt in fett und Welt in Ordnung.

22voto

Chris S Punkte 63542

WebForms

Utilice Literal Kontrolle, und fügen Sie eine <b> Tag um den gewünschten Teil des Textes:

_myLiteral.Text = "Hallo <b> groß </b> Welt";

Winforms

Zwei Möglichkeiten:

  1. Zwei Etiketten nebeneinander anbringen (viel einfacher)
  2. Unterklasse Label und erstellen Sie Ihre eigene benutzerdefinierte Zeichnung in der OnPaint() Methode.

Die zweite Wahl war antwortete bereits.

21voto

iburlakov Punkte 4078

Mit WinForms ist das nicht möglich.

8voto

RenniePet Punkte 10740

Dies ist eine Ausarbeitung von Simons Vorschlag, das Label-Steuerelement durch ein schreibgeschütztes Steuerelement zu ersetzen RichTextBox Kontrolle.

  1. Ersetzen Sie das Label-Steuerelement durch ein RichTextBox-Steuerelement an der gleichen Stelle und in der gleichen Größe. In den folgenden Anmerkungen lautet der Name des Steuerelements rtbResults.

  2. Machen Sie sie schreibgeschützt: rtbResults.ReadOnly = True;

  3. Keine Grenzen: rtbResults.BorderStyle = BorderStyle.None;

  4. Anstatt die anzuzeigende Zeichenkette an Label.Text weisen Sie es zu RichTextBox.Rtf und wenden Sie eine einfache RTF-Formatierung an.

Der folgende Code ist ein Beispiel - er zeigt Wörter an, die von einem Scrabble-Betrügerprogramm erzeugt wurden, wobei die Buchstaben mit dem höchsten Wert fett gedruckt sind.

  /// <summary>
  /// Method to display the results in the RichTextBox, prefixed with "Results: " and with the 
  /// letters J, Q, X and Z in bold type.
  /// </summary>
  private void DisplayResults(string resultString)
  {
     resultString = MakeSubStringBold(resultString, "J");
     resultString = MakeSubStringBold(resultString, "Q");
     resultString = MakeSubStringBold(resultString, "X");
     resultString = MakeSubStringBold(resultString, "Z");

     rtbResults.Rtf = @"{\rtf1\ansi " + "Results: " + resultString + "}";
  }

  /// <summary>
  /// Method to apply RTF-style formatting to make all occurrences of a substring in a string 
  /// bold. 
  /// </summary>
  private static string MakeSubStringBold(string theString, string subString)
  {
     return theString.Replace(subString, @"\b " + subString + @"\b0 ");
  }

3voto

Simon Punkte 24629

Muss es ein Label Kontrolle, oder müssen Sie nur Text an einer bestimmten Stelle platzieren? Wenn ersteres der Fall ist, müssen Sie eine benutzerdefinierte Malerei durchführen, wie bereits von anderen Personen erwähnt. Wenn nicht, können Sie ein Readonly RichTextBox stattdessen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X