C# 如何设置文本框';运行时是否将文本设置为粗体?

C# 如何设置文本框';运行时是否将文本设置为粗体?,c#,winforms,textbox,fonts,C#,Winforms,Textbox,Fonts,我使用的是Windows窗体,我有一个文本框,如果它是某个值,我偶尔会将文本加粗 如何在运行时更改字体特征 我看到有一个名为textbox1.Font.Bold的属性,但这是一个仅获取的属性 字体本身的粗体属性是只读的,但文本框的实际字体属性不是。您可以将文本框的字体更改为粗体,如下所示: textBox1.Font = new Font(textBox1.Font, FontStyle.Bold); 然后再回来: textBox1.Font = new Font(textBox1.F

我使用的是Windows窗体,我有一个文本框,如果它是某个值,我偶尔会将文本加粗

如何在运行时更改字体特征


我看到有一个名为textbox1.Font.Bold的属性,但这是一个仅获取的属性

字体本身的粗体属性是只读的,但文本框的实际字体属性不是。您可以将文本框的字体更改为粗体,如下所示:

  textBox1.Font = new Font(textBox1.Font, FontStyle.Bold);
然后再回来:

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

根据您的应用程序,您可能希望在文本更改或相关文本框的焦点/取消焦点时使用该字体分配

下面是一个简单的示例,它可能看起来像什么(空表单,只有一个文本框。当文本显示为“粗体”时,字体变为粗体,不区分大小写):


您可以使用
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();

下面是一个切换粗体、下划线和斜体的示例

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

谢谢哇,这比我想象的容易多了。所以我猜这意味着字体就像一个字符串,一旦你创建了它,你就不能改变它。您只能声明它的一个新实例。是的,它的行为就像字符串一样,在创建后无法更改其状态,即它是。但是,尽管有MSDN文章提到字体是不可变的,但字体本身的实际引用并没有说明这一点。对于链接按钮,这对我来说是有效的:button.Font.Bold=trues对于部分文本也可以这样做吗?我的意思是我只想突出文本的一部分。
 txtText.Font = new Font("Segoe UI", 8,FontStyle.Bold);
 //Font(Font Name,Font Size,Font.Style)
   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 );
   }