C# C-动态更改RichTextBox中文本的字体?
我在一个richTextBox和一个comboBox中有一些文本,其中有一些字体的名称。如果从组合框中选择了新字体,我想更改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
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;
}
}