我正在尝试在用户界面中实现带有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;
}
}