PreviewKeyDownで受信されたキーは、文字列に変換します
-
18-09-2019 - |
質問
私は、バーコードスキャナからすべてのキーを受け取るために、ウィンドウ上のPreviewKeyDownイベントを使用しています。 KeyEventArgsが列挙され、私の実際の文字列を与えられていません。私は、キーの一部がコントロール自体によって扱われるかもしれとしてのTextInputを使用したいとのTextInputイベントまでのバブルではないかもしれいけません。
私は、実際の文字列にPreviewKeyDownで取得するキーを変換する方法を探しています。 私はInputManager、のTextCompositionManagerのなどを見て、私は、私はキーのリストを与え、それが文字列で戻ってくる方法を見つけることではないのです。 TextCompositionManagerか何かでは、TextInputに利用できるものである文字列にこれらのキーを変換する必要があります。
解決
ここで私が使用しているイベントです。 KeyDownイベントは、キーを取得し、PreviewTextInputは、実際のテキストを取得します。だから、どこかのキーの間でテキストに変換取得されます。
public Window1()
{
InitializeComponent();
TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true);
}
private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
}
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
}
他のヒント
キーを - >テキスト変換は、はるかにあなたが考えるよりも複雑で、実際にいくつかの言語やいくつかのケースでは、単一の文字を構成する複数のキーストロークを必要とするので、単一の文字に単一のキーストロークをマップする方法はありません。 P> あなたがバーコードスキャナからの入力に興味があるので、
(私はWindowsのみが扱うことができるかの小さなサブセットを生成すると仮定していること、多分唯一のASCIIは多分少ない)あなたのプログラムに変換テーブルを自分とハードコード、それを構築することができます - それは、Windowsのテキスト処理は、(楽しみのために、検索「デッドキー」)していること、すべての狂気を処理するために、その後、はるかに簡単です。
[OK]を、から盗まれた<のhref = "https://stackoverflow.com/questions/544141/how-to-convert-a-character-in-to-equivalent-system-windows-input-key-enum-値/ 544245#544245" >このポストでます。
[DllImport("user32.dll")]
static extern short VkKeyScan(char ch);
static public Key ResolveKey(char charToResolve)
{
return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve));
}