【问题标题】:Text kerning in Microsoft rich text boxMicrosoft 富文本框中的文本字距调整
【发布时间】:2014-01-31 03:59:43
【问题描述】:

这个让我很困惑......

我正在尝试在 Visual Studio Visual Basic RichTextBox 控件中显示紧缩的 RTF 文本(到目前为止已在 VS2010 和 VS2012 下尝试过)。简单来说,我创建一个 Windows 窗体项目,在窗体中添加两个 RichTextBoxRichTextBox1RichTextBox2),不更改默认属性,并包含以下 VB 代码:

    Public Class Form1

        Private Sub Initialise(sender As System.Object, e As System.EventArgs) Handles Me.Load
            Dim txtRTF As String = "{\rtf1\ansi" & _
                               "{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}}" & _
                               "\f0\pard" & _
                               "\expndtw-60 a" & _
                               "\expndtw200 b" & _
                               "\expndtw-20 c}"

            RichTextBox1.Rtf = txtRTF
            RichTextBox2.Paste() ' RichTextBox2 formats properly iff clipboard holds ANY valid rtf content
            RichTextBox2.Rtf = txtRTF

        End Sub

    End Class

据我所知,txtRTF String 包含最少的有效RTF 标记和文本。

这是令人困惑的一点:RichTextBox1 中显示的文本没有紧缩,尽管\expndtw(扩大缇)RTF 标记,BUT 文本显示在RichTextBox2 正确紧缩,当且仅当剪贴板包含任何有效的 RTF 内容(例如,任何文本首先从 MS Word 文档复制到剪贴板)。如果剪贴板内容不是 RTF 格式,RichTextBox2 中显示的文本正确紧缩。

如果剪贴板不包含 RTF 格式的数据(或者如果 RichTextBox2.Paste() 代码被删除或注释掉)的运行结果:

如果剪贴板包含任何随机 RTF 格式文本的运行结果:

问题:

  1. 为什么在设置RichTextBox2.Rtf 字段之前,我之前将RTF 格式(并且不是非RTF 格式)粘贴到RichTextBox2 控件中是否重要?
  2. 更重要的是,我如何(在 VB 中)以编程方式在 RichTextBox 控件中显示正确的紧缩文本,而不会首先将随机的 RTF 格式文本粘贴到其中?

【问题讨论】:

    标签: visual-studio richtextbox rtf text-processing


    【解决方案1】:

    嗯,这需要做很多工作!不过,问题现在解决了。

    事实证明,虽然 RTF 规范指出 \ltrch(从左到右的字符运行)是默认状态,但似乎 RichTextBox 对象不一定同意。在 RTF 标记流中包含一个\ltrch(或者甚至,奇怪的是,一个\rtlch)控制序列完全解决了内核故障问题。通过\expndtwN\expndN 调整RTF 文本字距现在可以完美运行。无需愚蠢的Paste() 命令即可将RichTextBox 控件预配置为正确状态!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多