字符串末尾的RichTextBox不可见的可选字符

时间:2011-10-17 19:19:24

标签: c# .net winforms

使用鼠标或箭头键+ shift选择RichTextBox中的文本时,我可以在字符串的末尾选择一个额外的空白字符。重现:

  • 在RichTextBox中键入几个字符(或根本没有任何字符)

  • 将光标设置为字符串的末尾

  • 按住shift并按右箭头键

您会看到一个窄的突出显示选项,无法删除。

这会导致我的应用程序出现问题,因为当选择额外字符和一些有效文本时,SelectionFont属性返回null。关于如何禁用这个额外角色的任何想法,或者解决它吗?

c#winforms,visual studio 2010

3 个答案:

答案 0 :(得分:0)

在2010年的工作室中推出了一个新的winforms应用程序,但实际上无法重现这一点。我可以选择不可见的'字符',但它不会给我带来任何问题。 SelectedFont仍然为我返回一个有效的对象。我可以毫无问题地得到文本。

答案 1 :(得分:0)

有趣。(这是不是 Dr,医学博士,发言。)

如果在空RTF编辑控件中未选择任何内容,SelectedRtf将返回:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055\uc1 }"

当在空RTF编辑控件中选择“幻像”内容时,SelectedRtf会返回:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\f0\fs17\par
}"

当然,SelectedText在两种情况下都会返回空字符串。

所以我怀疑选择的是metainfo,它确保将替换空选择的新输入文本插入正确的字体

然而,这似乎是无稽之谈,因为即使没有选择任何内容,新输入的文本也会以正确的字体插入。

所以这一切都没有意义。 (嗯,确实如此,有点 - 见最后一段)

这让我相信这是RichTextBox中的一个错误,或者至少是一个小故障。

格式化信息可能由选择例程创建,该例程确保所选的非空文本将被新格式化的文本替换,格式与其替换的文本格式相同。为此,即使未选择任何文本,选择也必须始终包含格式信息。我认为。也许可以预先选择与默认格式不同的字符和段落格式,不知何故,然后键入文本使用该格式。

答案 2 :(得分:0)

SelectionFont控件的RichTextBox属性只能返回单个字体。如果所选范围包含多个字体,则读取SelectionFont属性将抛出NullReferenceException

最有可能发生的事情是RichTextBox Font属性与您在所选范围内使用的当前字体不同。最后选择的“额外”字符是Font属性,而不是您的SelectionFont属性。

如果您的RichTextBox只使用一种字体,请确保FontSelectionFont属性相同。

否则,只需检查它是否为空:

if (richTextBox1.SelectionFont != null) {
  //do something
}