【问题标题】:C# - Change font of text in RichTextBox dynamically?C# - 动态更改 RichTextBox 中文本的字体?
【发布时间】:2011-07-28 14:03:48
【问题描述】:

我在“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

【问题讨论】:

    标签: c# .net fonts richtextbox


    【解决方案1】:

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

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

    【讨论】:

    • 问题不在于选择文本,实际上我使用了错误的事件。我已经更新了我的问题,见上文。
    【解决方案2】:

    为此,您必须遍历整个文本。这是一种可能对您有所帮助的方法:

    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 祝你好运;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 2016-10-24
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多