Jak ustawić pogrubienie tekstu w polu tekstowym w czasie wykonywania?

101

Używam formularzy systemu Windows i mam pole tekstowe, w którym czasami chciałbym pogrubić tekst, jeśli jest to określona wartość.

Jak zmienić charakterystykę czcionki w czasie wykonywania?

Widzę, że istnieje właściwość o nazwie textbox1.Font.Bold, ale jest to właściwość tylko do pobierania.

Napęd
źródło

Odpowiedzi:

188

Pogrubiona właściwość samej czcionki jest tylko do odczytu, ale rzeczywista właściwość czcionki pola tekstowego - nie. Możesz zmienić czcionkę pola tekstowego na pogrubioną w następujący sposób:

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

A potem znowu:

  textBox1.Font = new Font(textBox1.Font, FontStyle.Regular);
Tim Lloyd
źródło
1
dzięki! wow, to było dużo łatwiejsze niż sobie wyobrażałem. Więc myślę, że oznacza to, że czcionka jest jak ciąg, kiedy ją utworzysz, nie możesz jej zmienić. możesz tylko zadeklarować jego nową instancję.
Diskdrive
2
Tak, wygląda na to, że zachowuje się jak ciąg znaków, ponieważ nie może zmienić swojego stanu po utworzeniu, tj. Jest niezmienny . Jednak chociaż istnieją artykuły MSDN, które odnoszą się do niezmienności Font, rzeczywiste odniesienie do samego Font nie stwierdza tego.
Tim Lloyd,
dla przycisku link to zadziałało dla mnie: button.Font.Bold = true
deebs
Czy to samo można zrobić dla częściowego tekstu? Chodzi mi o to, że chcę podkreślić tylko część tekstu.
Anil
3

W zależności od aplikacji prawdopodobnie będziesz chciał użyć tego przypisania czcionki do zmiany tekstu lub skupienia / rozjaśnienia danego pola tekstowego.

Oto krótka próbka tego, jak to mogłoby wyglądać (pusty formularz, tylko z polem tekstowym. Czcionka staje się pogrubiona, gdy tekst jest „pogrubiony”, bez rozróżniania wielkości liter):

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);
        }
    }
}
Robert Hui
źródło
1

Możesz użyć Extensionmetody przełączania między stylem zwykłym a stylem pogrubionym, jak poniżej:

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

I użycie:

textBox1.SwtichToBoldRegular();
Ali
źródło
1

Oto przykład przełączania pogrubienia, podkreślenia i kursywy.

   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 );
   }
Derek
źródło
0
 txtText.Font = new Font("Segoe UI", 8,FontStyle.Bold);
 //Font(Font Name,Font Size,Font.Style)
Shanmuga Priyan
źródło