C#WinFormでカスタムターミナルを作成しています。ユーザーが使用しているキーを押すとき、TextBox
それが有効なキーであることを確認する必要があります。私は彼らがものを削除して彼らが望むことを何でもすることができないようにする必要があります。KeyPress
とKeyDown
イベントを介してバックスペースと削除などを処理することができました。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
ます。