我正在用 C# winform 制作一个自定义终端。当用户按下TextBox
我正在使用的键时,我必须确保它是有效键。我需要阻止他们删除内容并为所欲为。我设法通过KeyPress
andKeyDown
事件处理退格和删除等。我遇到了用户按shift+的问题delete。它删除的东西就像backspace. 我不知道它的整数等价物是什么。我做了一个 C++ 程序来检测它,很简单:
char c = _getch();
cout << (int)c << endl;
我得到了-32。它在 C# 中不起作用。
经过这么多尝试包围它的值,我发现它是 0。它工作,至少在昨天,但现在它没有。我还可以使用 shift+delete 删除内容。
这是我的关键验证方法:
private bool IsInvalidKey(char key)
{
bool condition1 = !IsAsciiKey(key) && !IsNavigatingKey(key); // by navigation I mean: left, right, end and home keys.
bool condition2 = (GetCaretPosition() == CaretPosition.OutsideCommandLine && !IsNavigatingKey(key));
bool condition3 = ((key == (char)Keys.Back) && GetCaretPosition() == CaretPosition.BeginningOfCommandLine);
return (condition1 || condition2 || condition3);
}
private bool IsAsciiKey(char key)
{
return ((int)key > 0 && (int)key <= 127); // char(0) should be shift+delete
}
我怎样才能检测到这个键以及在哪里(在哪个事件中,KeyPress
或者KeyDown
?)
我使用的是普通TextBox
控件,而不是RichTextBox
.