我正在尝试在用户界面中使用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
我的代码出了什么问题,我无法理解?
答案 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;
}
}