0

我正在使用 .NET 4.0,但这也发生在 2.0 中...

在我看来,MultiLine 模式下的 RichTextBox 不应该像它那样选择文本行。

在控件中,输入多行文本,中间至少有一个空行,如下所示:

敏捷的棕色狐狸跳过
懒惰的狗。

更多的人喜欢
苹果而不是橙子。

应该可以将插入点放在开头(在“The”之前)并使用键盘的向下箭头键选择前两行 -包括其下方的空行,但它包括空行。我知道按左箭头键取消选择空白行并不是什么大事,但它烦人,此外,它应该像其他应用程序和 TextBox 控件一样工作。

我查看了控件的属性,但什么也没找到,但也许有一个,但我想不出它的名字。

我必须自己写这个行为吗?

谢谢。

4

1 回答 1

0
bool HasIgnoredSelection { get; set; }

HasIgnoredSelection = false;

rtb.KeyUp += (e) => {
     int cursorIndex = rtb.SelectionStart + rtb.SelectionLength;
     bool isBlankLineSelection = e.Shift 
         && e.KeyCode == Keys.Down 
         && rtb.Lines[rtb.GetLineFromCharIndex(cursorIndex)] == Environment.NewLine;

     if (!HasIgnoredSelection 
         && isBlankLineSelection) 
     {
        rtb.SelectionLength -= Environment.NewLine.Length;
        HasIgnoredSelection = true;
     }
     else if (isBlankLineSelection)
     {
        HasIgnoredSelection = false;
        rtb.SelectionLength += Environment.NewLine.Length;
     }
     else 
     {
        HasIgnoredSelection = false;
     }
};

当然,这是您所说的骇人听闻的做法,尽管我不确定这是否是您想要的。除非您按住向下键,否则它将阻止您继续通过键盘选择文本,因此还有其他方法可以解决此问题。

编辑:添加了按下两次以使其跳转到空白行之后的行的功能

于 2013-04-07T00:09:27.697 回答