光标位置不会在根目录停止:winForms RichTextBox



我正在尝试在用户界面中实现带有RichTextBox的命令行实用程序。我正在尝试限制类似于MS Dos命令提示符窗口的Left and Right arrow keys的使用。我的实现不应该允许用户跨越当前根。

e.g.

如果C:Test>是 root,则不应允许用户使用左箭头键划'>'

下面是我的代码:

richTextbox1.KeyDown += OnKeyDown;
string root = "C:Test>";
void OnKeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Left:
        case Keys.Right:
        {
            int lastline = richTextbox1.Lines.Length - 1;
            int first = richTextbox1.GetFirstCharIndexFromLine(lastline);
            int valid = first + root.Length + 1;
            if (richTextbox1.SelectionStart < valid )
            {
                richTextbox1.Select(valid, 0);
                richTextbox1.Invalidate();
            }
        }
        break;
    }
}

它适用于以下情况: C:Test>xyz:当用户不断按left arrow时,他/她不能超越>字符

失败案例: C:Test>:当用户按住left arrow时,他/她可以超越>字符,并在t停止

我的代码出了什么问题,我无法弄清楚?

太好了,它适用于e.Handled = true,工作代码如下:richTextbox1.KeyDown += OnKeyDown;字符串根 = "C:\Test>";

void OnKeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Left:
        case Keys.Right:
        {
            int lastline = richTextbox1.Lines.Length - 1;
            int first = richTextbox1.GetFirstCharIndexFromLine(lastline);
            int valid = first + root.Length + 1;
            if (richTextbox1.SelectionStart < valid )
            {
                //richTextbox1.Select(valid, 0);
                //richTextbox1.Invalidate();
                e.Handled = true;
            }
        }
        break;
    }
}

最新更新