3

ウィンドウで PreviewKeyDown イベントを使用して、バーコード スキャナーからすべてのキーを受け取ります。KeyEventArgs は列挙型であり、実際の文字列は提供されません。一部のキーはコントロール自体によって処理される可能性があり、TextInput イベントにバブルアップしない可能性があるため、TextInput を使用したくありません。

PreviewKeyDown で取得したキーを実際の文字列に変換する方法を探しています。InputManager、TextCompositionManagerなどを見ましたが、キーのリストを与える方法が見つからず、文字列で返されます。TextCompositionManager または何かが、これらのキーを TextInput で利用可能な文字列に変換する必要があります。

4

2 に答える 2

2

私が使用しているイベントはこちらです。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)
            {
            }
于 2009-10-01T18:18:42.520 に答える
1

キー -> テキスト変換は、あなたが思っているよりもはるかに複雑です。実際には、1 つのキーストロークを 1 つの文字にマッピングする方法はありません。これは、言語によっては、1 つの文字を構成するために複数のキーストロークが必要になる場合があるためです。

バーコード スキャナーからの入力に関心があるので (Windows が処理できるものの小さなサブセットしか生成しないと思います。おそらく ASCII だけかもしれません)、自分で変換テーブルを作成し、それをプログラムにハード コードすることができます。それよりも、Windows のテキスト処理が行うすべての狂気を処理する方が簡単です (楽しみのために、「デッド キー」を検索してください)。

于 2009-10-05T10:52:59.570 に答える