web-dev-qa-db-ja.com

キーから文字を取得

カスタムテキストエディターをコーディングしていて、KeyDownイベントとKeyUpイベントを使用しています。そのイベントは、「Key」インスタンスが含まれているパラメーターからKeyEventArgsを取得します。

「キー」を実際の文字に変換するにはどうすればよいですか?

Key.ToString()を "。"と共に​​使用する「OmePeriod」または「」で「OmeComma」が表示されます。私はその値を直接変換できます...しかし、それは大変な作業であり、そのKeysを実際の「char」に変換するクラスが存在する必要があると確信しています。

ありがとう!

よろしく。

19
Jesús Galindo

ここでの主な問題は、キャッチしているイベントがリールキーボードイベントであり、キーが文字ではなくキーであることです。その間にキーマップがあります!たとえば、shift-Aと入力すると、キーが押された場合に1つではなく2つのイベントを受け取ります。

この議論は役に立ちます: C#仮想キーコードを文字に変換する方法?

5
VdesmedT

KeyDownイベントを使用する代わりに、TextInputイベントを使用してみてください。次のようなイベントハンドラーをアタッチします。

private void Grid_TextInput(object sender, TextCompositionEventArgs e)
{
    Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0];
    Debug.WriteLine(keyChar);
}

これは最初のバイトのみを取得することに注意してください。これは国際(Unicode)テキストでは機能しません。より複雑なテキスト入力イベントでも機能しない可能性があるので、注意してください!

詳細については、 このMSDN記事 を参照してください。

5
markmuetz

これにより、必要なものが正確に提供されます....キーボードのキーコードからのロケール固有の文字...

WPF/C#の異なるロケールキーボードで「#」文字をキャプチャする方法?

3
WPF-it

KeyEventArgs.Key プロパティと以下を使用します。 文字を同等のSystem.Windows.Input.Key Enum値に変換する方法 を使用しますが、代わりに以下を使用します。- KeyInterop.VirtualKeyFromKeyメソッド

0
Paul