0
我正试图在用户界面中实现一个命令行工具RichTextBox
。我试图限制使用类似于MS Dos命令提示窗口的Left and Right arrow keys
。我的实现不应该允许用户跨越当前的根目录。光标位置不停止在根目录下:winforms RichTextBox
e.g.
C:\Test>
如果是根,用户不应该被允许穿过'>'
与左箭头键。
下面是我的代码:
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;'取消关键笔划。但这是一些蛇坑。 'home','(control-)backspace','shift-left/right'(也许更多)呢? – 2015-03-08 22:53:28
是的我可以使用'e.Handled = true;'但是我应该在什么情况下取消键击?所有其他密钥也需要处理。 “左”和“右”键是我的第一个目标。 – Neo 2015-03-09 00:35:39
是的,使用e.Handled,仅用于左键。并使用SelectionProtected属性来防止用户使用退格删除“root”。 – 2015-03-09 03:32:36