【问题标题】:Change RichTextBox font family only not FontSize仅更改 RichTextBox 字体系列而不更改 FontSize
【发布时间】:2015-03-17 17:22:34
【问题描述】:

如何只更改 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 的解决方案,但我认为实现该功能太复杂且工作量太大。

【问题讨论】:

  • 如果您在同一个 RichTextBox 中有多个样式,看起来 Lars 的解决方案可能是可行的方法。我见过的其他解决方案能够保持字体大小/等。仅当RichTextBox 中的所有文本都使用相同的样式(字体、粗体、大小等)

标签: c# .net winforms richtextbox


【解决方案1】:

如果您想避免 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;
}

【讨论】:

  • 它有效且易于理解,感谢 Lars!我没有闪烁问题,但解决闪烁问题的好主意。
猜你喜欢
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2020-06-26
相关资源
最近更新 更多