c# - 仅更改 RichTextBox 字体系列而不更改 FontSize

标签 c# .net winforms richtextbox

如何仅更改 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;
}

关于c# - 仅更改 RichTextBox 字体系列而不更改 FontSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105689/

相关文章:

c# - 使用时出错

c# - new KeyEventHandler(Form1_KeyDown) 和 Form1_KeyDown 之间的区别

c# - Console.WriteLine() 的高内存使用率

c# - 是否有可用于在 .NET 中进行编程的 Subversion API

c# - 实例化具有初始值的类型是否比两个单独的语句便宜?

vb.net - 在 Vb.Net 窗体中处理跨线程异常

c# - 使用 C# WebBrowser 时是否可以检测到调用的任何 javascript 函数

c# - 将多波段 16 位 tiff 图像转换为 8 位 tiff 图像

c# - Ubuntu 9.04 上最新的 Mono + MonoDevelop 的最佳设置是什么?

c# - 如何从组合框中的值成员中删除值?