我在“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();
来刷新文本框但是静脉。
如何通过从comboBox中选择来更改文本的字体?
更新:我刚才发现上面的代码很好,问题是我使用了错误的事件调用,使用comboBox1_SelectedValueChanged()
代替comboBox1_SelectedIndexChanged()
并且它有效好了。
提示:如果您想使用richTextBox1.Font
更改整个TextBox的字体,如果您想更改所选文字的字体,请仅使用richTextBox1.SelectionFont
。
答案 0 :(得分:8)
您可以在更改SelectedFont
选项之前选择所有文字:
this.richTextBox1.SelectAll();
this.richTextBox1.SelectionFont = newFont;
答案 1 :(得分: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 祝你好运;)