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

Есть ли способ сделать часть label.text ?

 label.text = "asd" + string; 

Вы хотите, чтобы string была выделена жирным шрифтом.

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

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

Следующий class иллюстрирует, как это сделать, переопределяя OnPaint() в classе 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"; 

Привет будет напечатано жирным шрифтом, а мир будет нормальным.

WebForms

Используйте Literal control и добавьте вокруг той части текста, которую вы хотите:

_myLiteral.Text = “Hello большой мир”;

Winforms

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

  1. Поместите две метки рядом (гораздо проще)
  2. Подclass Label и сделайте свой собственный рисунок в методе OnPaint() .

На второй выбор уже был дан ответ .

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

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

  2. Сделайте это только для rtbResults.ReadOnly = True; : rtbResults.ReadOnly = True;

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

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

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

  ///  /// Method to display the results in the RichTextBox, prefixed with "Results: " and with the /// letters J, Q, X and Z in bold type. ///  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 + "}"; } ///  /// Method to apply RTF-style formatting to make all occurrences of a substring in a string /// bold. ///  private static string MakeSubStringBold(string theString, string subString) { return theString.Replace(subString, @"\b " + subString + @"\b0 "); } 

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

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

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

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

В ASP.NET вы можете:

 label.Text = string.Format("asd {0}", string); 

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

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

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

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

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

Решение VB.NET

Я ответила на ответ @ affan на вопрос о расширении classа 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 
  • Как создать пользовательский элемент редактора PropertyGrid, который открывает форму?
  • Почему загрузка формы не может устранить исключение?
  • Показать дочернюю форму в центре родительской формы в C #
  • Скрытие нежелательных свойств в пользовательских элементах управления
  • Как изменить Form1 label.text при установке флажка на form2?
  • Отключение анимации прогресса проекта .NET при изменении значения?
  • Как использовать индикатор выполнения WinForms?
  • Как я могу исправить приложение Windows .NET при запуске с кодом исключения: 0xE0434352?
  • Как скрыть вкладку TabControl
  • Как отправить электронное письмо по умолчанию?
  • Проверка с помощью Validating event и ErrorProvider - Показать сводку ошибок
  • Давайте будем гением компьютера.