C# - 动态改变RichTextBox中文本的字体?

6

我有一些文本在“richTextBox”中,还有一个“comboBox”包含一些字体名称。如果从“comboBox”选择了新字体,我想要更改“richTextBox”中文本的字体。我正在使用以下代码。

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();来刷新文本框,但结果无效。
我怎样能通过从下拉框中选择来更改文本的字体?
更新:我刚弄清楚上面的代码没问题,问题在于我使用了错误的事件调用,使用了comboBox1_SelectedValueChanged()代替comboBox1_SelectedIndexChanged(),现在它正常工作了。
提示:如果你想更改整个TextBox的字体,请使用richTextBox1.Font,如果您只想更改选定文本的字体,请使用richTextBox1.SelectionFont
2个回答

10

在更改 SelectedFont 选项之前,您可以选择所有文本:

this.richTextBox1.SelectAll();
this.richTextBox1.SelectionFont = newFont;

问题并不是选择文本的问题,实际上我使用了错误的事件。我已经更新了我的问题,请参见上面。 - ePandit

0
你需要遍历整个文本来实现这个功能。以下是一个可能会对你有所帮助的方法:
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 祝你好运 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接