【问题标题】:How to tell C# RichTextBox to select lines via keyboard like other apps如何告诉 C# RichTextBox 像其他应用程序一样通过键盘选择行
【发布时间】:2013-04-06 21:44:08
【问题描述】:

我使用的是 .NET 4.0,但这也发生在 2.0...

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

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: c# richtextbox selection


    【解决方案1】:
    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;
         }
    };
    

    当然,这就是你所说的那种老生常谈的做法,尽管我不确定这是否是你想要的。除非您按住向下键,否则它将阻止您继续通过键盘选择文本,因此您可以通过其他方式来解决此问题。

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

    【讨论】:

    • 感谢您的回复,但即使我尝试调整它(例如,将 Environment.NewLine 更改为 "" 并从长度中添加/减去一个),它仍然不像正常的文本框应该。我应该提到突出显示几行并复制/粘贴它们也不会按应有的方式粘贴。奇怪,我觉得非托管RichEdit控件没有这些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多