2

ユーザーがVB.Netテキストボックスに入力すると、キーが押されたことを検出したいと思います(テキストボックスからテキストを書き込んだ後に読み取ることができないと仮定します)。これは英語では簡単です (e.KeyChar または Keys.[A, B, C, ...etc] を使用)。ただし、Windows の既定のキーボードを英語からアラビア語やペルシア語などの別の言語に変更しても、英語の文字が検出されます (アラビア語またはペルシア語が入力されています)。

4

3 に答える 3

2

これを行うには、ASCII キーコードをキーボードに表示されるペルシャ文字にマップするテーブルを作成します。

VB:

'Create a look-up table
Dim Chars(256) As String
Chars(Asc('Q')) = 'ض';
Chars(Asc('W'))= 'ص';
Chars(Asc('E')) = 'ث';
' and so on...

'Now get it
Dim persianChar As String = Chars(e.KeyValue); 'You have your character

C#:

//Create a look-up table
char[] chars = new char[256];
chars['Q'] = 'ض';
chars['W'] = 'ص';
chars['E'] = 'ث';
// and so on...

//Now get it
char persianChar = chars[e.KeyValue]; //You have your character
于 2012-01-22T21:40:25.513 に答える
1

この種の事故は、KeyPress イベントの代わりに KeyDown を使用した場合にのみ、簡単に説明できます。KeyDown イベントは、仮想キーを報告します。それらの名前は、元の IBM PC キーボードのレイアウト (英語のレイアウト) に基づいています。型はKeys、.NET フレームワークでそれらを宣言します。

KeyDown イベントは、選択されたキーボード レイアウトを使用して、Windows によってさらに処理されます。基礎となる winapi 関数はToUnicodeEx()です。多くの引数があり、主なものは lpKeyState (修飾キーとデッド キーの状態を追跡する) と dwhkl (選択されたキーボード レイアウト) です。マシンのキーボード レイアウトを変更すると、最後の引数が変更されます。次に KeyPress イベントをトリップします。キーストロークがタイピング キーを表している場合、その e.KeyCode 引数は utf-16 Unicode コードポイントです。

KeyDown イベントを自分で解釈しようとしないでください。Ctrl+F1 などのショートカット キー ストロークを検出するには、ProcessCmdKey() をオーバーライドする必要があります。キーを入力するには、常に KeyPress イベントを使用します。

于 2012-01-22T21:41:42.050 に答える
0

キーコードは単にキーボードから受信した信号です。OS はこれらを現在の入力言語に解釈します。

入力した最後の文字が特定の言語に属しているかどうかをテストする場合は、テキスト ボックスから直接文字をテストする必要があります (値が正しい Unicode 範囲内にあることを確認してください)。

于 2012-01-22T21:30:26.633 に答える