Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C-动态更改RichTextBox中文本的字体?_C#_.net_Fonts_Richtextbox - Fatal编程技术网

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

C# C-动态更改RichTextBox中文本的字体?,c#,.net,fonts,richtextbox,C#,.net,Fonts,Richtextbox,我在一个richTextBox和一个comboBox中有一些文本,其中有一些字体的名称。如果从组合框中选择了新字体,我想更改richTextBox中文本的字体。我正在使用以下代码 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex == 1) richTextBox1.Font = new Font("Comic Sans

我在一个richTextBox和一个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。我还添加了InputExtBox.Refresh;以上代码刷新后的文本框却在静脉中

如何通过从组合框中选择来更改文本的字体

更新:我刚刚发现上面的代码没有问题,问题是我使用了错误的事件调用,使用comboBox1\u SelectedValueChanged代替comboBox1\u SelectedIndexChanged,现在工作正常


提示:如果要更改整个文本框的字体,请使用richTextBox1.font;如果要更改选定文本的字体,请仅使用richTextBox1.SelectionFont。

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


为此,您必须在整个文本中进行迭代。这是一种方法,它可能会帮助您:

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;
        }
    }
如果您想了解我是如何做到这一点的,您可以阅读本文:
祝你好运

问题不在于选择文本,实际上我使用了错误的事件。我已经更新了我的问题,见上文。
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;
        }
    }