仅更改 RichTextBox 字体系列而不更改 FontSize
Change RichTextBox font family only not FontSize
如何只更改 RichTextBox (RTB) 中的字体系列,同时保持字体大小不变?我有一个 RTB,它可以包含不同字体和字体大小的文本,我想更改所有内容以拥有一个新的字体系列,但保留用户提供的任何大小。我怎么能做到这一点?我知道 SelectionFont 属性,但 Font 构造函数的每个重载也需要字体大小。
RichTextBox rtb = new RichTextBox();
// some code that adds various text of different fonts and font sizes
rtb.SelectAll();
rtb.SelectionFont = new Font("arial", ??);
此外,我确实在 this SO post 上看到了 Lars Tech 的解决方案,但我认为实现该功能太复杂,工作量太大。
如果您想避免使用 pinvoking 解决方案,那么您将不得不逐个循环遍历各个字符。为避免闪烁,您可以使用屏幕外的 RichTextBox 控件来应用更改:
using (RichTextBox tmpRB = new RichTextBox()) {
tmpRB.SelectAll();
tmpRB.SelectedRtf = rtb.SelectedRtf;
for (int i = 0; i < tmpRB.TextLength; ++i) {
tmpRB.Select(i, 1);
tmpRB.SelectionFont = new Font("Arial", tmpRB.SelectionFont.Size);
}
tmpRB.SelectAll();
rtb.SelectedRtf = tmpRB.SelectedRtf;
}
如何只更改 RichTextBox (RTB) 中的字体系列,同时保持字体大小不变?我有一个 RTB,它可以包含不同字体和字体大小的文本,我想更改所有内容以拥有一个新的字体系列,但保留用户提供的任何大小。我怎么能做到这一点?我知道 SelectionFont 属性,但 Font 构造函数的每个重载也需要字体大小。
RichTextBox rtb = new RichTextBox();
// some code that adds various text of different fonts and font sizes
rtb.SelectAll();
rtb.SelectionFont = new Font("arial", ??);
此外,我确实在 this SO post 上看到了 Lars Tech 的解决方案,但我认为实现该功能太复杂,工作量太大。
如果您想避免使用 pinvoking 解决方案,那么您将不得不逐个循环遍历各个字符。为避免闪烁,您可以使用屏幕外的 RichTextBox 控件来应用更改:
using (RichTextBox tmpRB = new RichTextBox()) {
tmpRB.SelectAll();
tmpRB.SelectedRtf = rtb.SelectedRtf;
for (int i = 0; i < tmpRB.TextLength; ++i) {
tmpRB.Select(i, 1);
tmpRB.SelectionFont = new Font("Arial", tmpRB.SelectionFont.Size);
}
tmpRB.SelectAll();
rtb.SelectedRtf = tmpRB.SelectedRtf;
}