C # - Изменить шрифт текста в RichTextBox динамически? - PullRequest
4 голосов
/ 03 апреля 2011

У меня есть текст в «richTextBox» и «comboBox» с именами некоторых шрифтов.Я хочу изменить шрифт текста в «richTextBox», если в «comboBox» выбран новый шрифт.Я использую следующий код.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex == 1)
        richTextBox1.Font = new Font("Comic Sans MS", 14);
}

Проблема в том, что если я выберу шрифт, текст не изменит свой шрифт автоматически, он изменится, только если я наберу новый текст.Я также попробовал richTextBox1.SelectionFont вместо richTextBox1.Font.Я также добавил InputTextBox.Refresh(); после кода выше, чтобы обновить текстовое поле, но в вене.

Как я могу изменить шрифт текста, просто выбрав в comboBox?

Обновление: Я только что понял, что приведенный выше код в порядке, проблема в том, что я использовал неправильный вызов события, использовал comboBox1_SelectedValueChanged() вместо comboBox1_SelectedIndexChanged(), и теперь он работает нормально.

Совет: Если вы хотите изменить шрифт всего TextBox, используйте richTextBox1.Font, если вы хотите изменить шрифт выделенного текста, используйте richTextBox1.SelectionFont.

Ответы [ 2 ]

8 голосов
/ 03 апреля 2011

Вы можете выделить весь текст перед изменением опции SelectedFont:

this.richTextBox1.SelectAll();
this.richTextBox1.SelectionFont = newFont;
0 голосов
/ 22 января 2014

Для этого вам нужно перебрать весь текст Этот метод может вам помочь:

private void ChangeFontStyleForSelectedText(string familyName, float? emSize, FontStyle? fontStyle, bool? enableFontStyle)
    {
        _maskChanges = true;
        try
        {
            int txtStartPosition = txtFunctionality.SelectionStart;
            int selectionLength = txtFunctionality.SelectionLength;
            if (selectionLength > 0)
                using (RichTextBox txtTemp = new RichTextBox())
                {
                    txtTemp.Rtf = txtFunctionality.SelectedRtf;
                    for (int i = 0; i < selectionLength; ++i)
                    {
                        txtTemp.Select(i, 1);
                        txtTemp.SelectionFont = RenderFont(txtTemp.SelectionFont, familyName, emSize, fontStyle, enableFontStyle);
                    }

                    txtTemp.Select(0, selectionLength);
                    txtFunctionality.SelectedRtf = txtTemp.SelectedRtf;
                    txtFunctionality.Select(txtStartPosition, selectionLength);
                }
        }
        finally
        {
            _maskChanges = false;
        }
    }

Если вы хотите узнать, как я это сделал, вы можете прочитать эту статью: http://how -to-code-net.blogspot.ro / 2014/01 / how-to-make-custom-richtextbox-control .html Удачи;)

...