Подтвердить что ты не робот

Сделать часть текста ярлыка выделенной полужирным шрифтом

Можно ли сделать часть label.text полужирным?

label.text = "asd" + string;

Желательно, чтобы фрагмент string был полужирным.

Возможно, как это можно сделать?

4b9b3361

Ответ 1

WinForms не позволяют это делать.

Ответ 2

Следующий класс иллюстрирует, как это сделать, переопределяя OnPaint() в классе Label WinForms. Вы можете уточнить его. Но то, что я сделал, это использовать символ строки (|) в строке, чтобы сообщить методу OnPaint() для печати текста перед | как жирным шрифтом и после него как обычный текст.

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);                
        }
    }
}

Здесь, как его использовать:

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

Привет будет напечатан в жирный и мир в обычном режиме.

Ответ 3

WebForms

Используйте элемент управления Literal и добавьте тег <b> вокруг части текста, который вы хотите:

_myLiteral.Text = "Hello <b> большой </b> мир";

Winforms

Два варианта:

  • Поместите две метки рядом (гораздо проще)
  • Подкласс Label и сделайте свой собственный чертеж в методе OnPaint().

Второй вариант был ответил уже.

Ответ 4

Это разработка по предложению Саймона о замене элемента управления Label контролом readtonly RichTextBox.

  • Замените элемент управления Label с помощью элемента управления RichTextBox, такого же местоположения и размера. В следующих примечаниях имя элемента управления - rtbResults.

  • Сделайте это только для чтения: rtbResults.ReadOnly = True;

  • Без границ: rtbResults.BorderStyle = BorderStyle.None;

  • Вместо назначения строки, отображаемой на Label.Text, вы назначаете ее RichTextBox.Rtf и применяете некоторое простое форматирование RTF.

Следующий код - это образец - он отображает слова, созданные программой читера Scrabble, где выделенные жирным шрифтом выделены жирным шрифтом.

  /// <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 ");
  }

Ответ 5

Легкий способ сделать то, что вы хотите, это просто добавить две метки. Таким образом, вы можете сделать один жирный шрифт, и он будет выглядеть нормально с правильным позиционированием.

Обычный способ - создать элемент управления с двумя или более метками, и вы можете установить свойства для каждого из них. Кроме того, это имеет то преимущество, которое можно использовать повторно.

Ответ 6

Нужно ли быть элементом управления Label, или вам просто нужно разместить текст в определенном месте? Если первое, вам нужно будет сделать обычную роспись, как отметили другие люди. Если нет, вы можете использовать readonly RichTextBox.

Ответ 7

В WinForms переопределите метод Label.OnPaint() и нарисуйте текст самостоятельно.

Ответ 8

В ASP.NET вы можете сделать:

label.Text = string.Format("asd <span style='font-weight: bold;'>{0}</span>", string);

Но, как все говорят, зависит от того, что вы используете.

Ответ 9

Это зависит от того, насколько вы прагматичны. Что-то, что звучит излишне, но может работать, - это использовать элемент управления веб-браузером в вашей форме и вставлять в него разметку HTML. Как я сказал, слишком много слов для метки, но если у вас есть несколько строк текста, которые нужно форматировать, это может быть вариант. - Х. Абрахам Чавес только что редактировал

Ответ 10

Использовать управление Infragistics UltraLabel - он поддерживает форматирование html. Возможно, есть и другие сторонние решения.

Ответ 11

Я построил UserControl, который содержит TransparentRichTextBox, позволяющий форматировать фрагменты текста с использованием синтаксиса RTF.

Ничего особенного и синтаксиса довольно легко понять. Проверьте здесь.

Ответ 12

Решение VB.NET

Я принял @affan answer ответ на расширение класса Label и переопределение метода OnPaint.

Я перевел свое решение в VB и сделал несколько изменений, чтобы преодолеть некоторые проблемы, которые у меня были с заполнением. Моя версия также делает текст справа от символа трубы | полужирным, а не слева.

Пример: Пример

Imports System.Windows.Forms
Imports System.Drawing

' Add some custom functionality to the standard Label Class
Public Class CustomLabel
    Inherits Label

    ' Allow bold font for right half of a label 
    ' indicated by the placement of a pipe char '|' in the string (ex. "Hello | World" will make bold 'World'
    Protected Overrides Sub OnPaint(e As PaintEventArgs)
        Dim drawPoint As Point = New Point(0, 0)
        Dim boldDelimiter As Char = "|"c

        Dim ary() As String = Me.Text.Split(boldDelimiter)

        If ary.Length = 2 Then
            Dim normalFont As Font = Me.Font
            Dim boldFont As Font = New Font(normalFont, FontStyle.Bold)

            ' Set TextFormatFlags to no padding so strings are drawn together.
            Dim flags As TextFormatFlags = TextFormatFlags.NoPadding

            ' Declare a proposed size with dimensions set to the maximum integer value. https://msdn.microsoft.com/en-us/library/8wafk2kt(v=vs.110).aspx
            Dim proposedSize As Size = New Size(Integer.MaxValue, Integer.MaxValue)

            Dim normalSize As Size = TextRenderer.MeasureText(e.Graphics, ary(0), normalFont, proposedSize, flags)
            Dim boldSize As Size = TextRenderer.MeasureText(e.Graphics, ary(1), boldFont, proposedSize, flags)

            Dim normalRect As Rectangle = New Rectangle(drawPoint, normalSize)
            Dim boldRect As Rectangle = New Rectangle(normalRect.Right, normalRect.Top, boldSize.Width, boldSize.Height)



            TextRenderer.DrawText(e.Graphics, ary(0), normalFont, normalRect, Me.ForeColor, flags)
            TextRenderer.DrawText(e.Graphics, ary(1), boldFont, boldRect, Me.ForeColor, flags)

        Else
            ' Default to base class method
            MyBase.OnPaint(e)
        End If

    End Sub


End Class