0

我正试图围绕 WinForms RichTextBox 中的一种行为。

当您使用 RichTextBox 并选择 RichTextBox 的右端时,可以通过按住 shift 并向右推来选择右侧的附加字符。

真正让我难以置信的是 RichTextBox 的 SelectionLength 属性为 0。如果您从视觉上看它,您似乎选择了从当前文本末尾开始的 1 个字符长度。如果您查看 curSelStart 和 curSelEnd 属性,则 curSelStart 从您的 Text 属性的末尾开始,并且 curSelEnd 超出它的一个字符。

我们正在使用我们自己的 Winforms RichTextBox 子类,该子类实现了所有特殊行为方式,其中我们假设如果按选择长度为 0 的退格键,您将删除一个字符。在这种情况下,这个假设不再成立,因为按下退格键只会删除您当前的选择。

关于它为什么会这样表现的任何想法?有什么办法吗?

4

1 回答 1

0

当我们开始使用启用了 MultiLine 的自定义 RichTextBox 控件时,这种行为开始给我们带来麻烦。因此,这从我观察到的奇怪行为升级为我必须解决的错误。

RichTextBox 如何处理换行符似乎是一个怪癖。在每一行的末尾总会有一个 '\n' 字符。那就是我在上面的问题中描述的神秘人物。如果您尝试将其删除,它将立即被读取。

有了这个知识,我可以检查属性 SelectedText 是否以 '\n' 字符结尾,如果我插入的新文本不包含 '\n' 我会确定我需要在我的偏移量中添加一个额外的字符需要我的自定义控件。

我不敢相信我之前没有注意到'\n'。哦,好吧..问题现在解决了。

于 2013-03-22T13:28:00.427 回答