【问题标题】:RichTextBox SelectionLength zero when Selecting outside Text Property选择文本属性外部时,RichTextBox SelectionLength 为零
【发布时间】:2012-08-19 18:26:35
【问题描述】:

我正试图围绕 WinForms RichTextBox 中的一个行为展开思考。

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

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

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

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

【问题讨论】:

标签: winforms richtextbox


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2010-11-10
    • 2011-02-06
    • 1970-01-01
    • 2010-10-02
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多