光标位置不会在root停止:winforms RichTextBox

时间:2015-03-08 20:29:58

标签: c# winforms

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

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

我的代码出了什么问题,我无法理解?

1 个答案:

答案 0 :(得分:0)

很好,它适用于e.Handled = true,工作代码如下: richTextbox1.KeyDown + = OnKeyDown; string root =“C:\ Test&gt;”;

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;
    }
}