Как сделать текст текстового поля полужирным во время выполнения?

99

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

Как изменить характеристики шрифта во время выполнения?

Я вижу, что есть свойство textbox1.Font.Bold, но это свойство только для получения.

Дисковод
источник

Ответы:

182

Полужирное свойство самого шрифта доступно только для чтения, но фактическое свойство шрифта текстового поля - нет. Вы можете изменить шрифт текстового поля на полужирный следующим образом:

  textBox1.Font = new Font(textBox1.Font, FontStyle.Bold);

А потом снова:

  textBox1.Font = new Font(textBox1.Font, FontStyle.Regular);
Тим Ллойд
источник
1
Спасибо! вау, это было намного проще, чем я предполагал. Полагаю, это означает, что шрифт похож на строку: как только вы его создадите, вы не сможете его изменить. вы можете только объявить его новый экземпляр.
Diskdrive,
2
Да, похоже, он ведет себя как строка с точки зрения невозможности изменить свое состояние после создания, т.е. он неизменен . Однако, несмотря на то, что есть статьи MSDN, в которых говорится о неизменности шрифта Font, фактическая ссылка на Font не утверждает этого.
Тим Ллойд
для кнопки linkbutton это сработало для меня: button.Font.Bold = true
Debs 01
Можно ли сделать то же самое с частичным текстом? То есть я хочу выделить только часть текста.
Анил
3

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

Вот краткий пример того, как это могло бы выглядеть (пустая форма, только с текстовым полем. Шрифт становится полужирным, когда текст читается как «полужирный», без учета регистра):

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        RegisterEvents();
    }

    private void RegisterEvents()
    {
        _tboTest.TextChanged += new EventHandler(TboTest_TextChanged);
    }

    private void TboTest_TextChanged(object sender, EventArgs e)
    {
        // Change the text to bold on specified condition
        if (_tboTest.Text.Equals("Bold", StringComparison.OrdinalIgnoreCase))
        {
            _tboTest.Font = new Font(_tboTest.Font, FontStyle.Bold);
        }
        else
        {
            _tboTest.Font = new Font(_tboTest.Font, FontStyle.Regular);
        }
    }
}
Роберт Хуэй
источник
1

Вы можете использовать Extensionметод для переключения между обычным стилем и жирным шрифтом, как показано ниже:

static class Helper
    {
        public static void SwtichToBoldRegular(this TextBox c)
        {
            if (c.Font.Style!= FontStyle.Bold)
                c.Font = new Font(c.Font, FontStyle.Bold);
            else
                c.Font = new Font(c.Font, FontStyle.Regular);
        }
    }

И использование:

textBox1.SwtichToBoldRegular();
Али
источник
0
 txtText.Font = new Font("Segoe UI", 8,FontStyle.Bold);
 //Font(Font Name,Font Size,Font.Style)
Шанмуга Приян
источник
0

Вот пример переключения полужирного, подчеркивания и курсива.

   protected override bool ProcessCmdKey( ref Message msg, Keys keyData )
   {
      if ( ActiveControl is RichTextBox r )
      {
         if ( keyData == ( Keys.Control | Keys.B ) )
         {
            r.SelectionFont = new Font( r.SelectionFont, r.SelectionFont.Style ^ FontStyle.Bold ); // XOR will toggle
            return true;
         }
         if ( keyData == ( Keys.Control | Keys.U ) )
         {
            r.SelectionFont = new Font( r.SelectionFont, r.SelectionFont.Style ^ FontStyle.Underline ); // XOR will toggle
            return true;
         }
         if ( keyData == ( Keys.Control | Keys.I ) )
         {
            r.SelectionFont = new Font( r.SelectionFont, r.SelectionFont.Style ^ FontStyle.Italic ); // XOR will toggle
            return true;
         }
      }
      return base.ProcessCmdKey( ref msg, keyData );
   }
Дерек
источник