0

これが何百回も尋ねられたことは知っていますが、私を助ける解決策を見つけることができませんでした. 私はバーコード スキャナーを使用しており、キーダウン イベントだけを使用して入力されたキーを取得できるようにしたいと考えています。何らかの理由で、keydown イベントと keypress イベントの両方を使用できません (keypress イベントは実行されません)。

ハイフン、大文字、ドットなどの文字を取得できる必要があり、Enter キーも検出する必要があります。

これらは私のリスナーです:

form.KeyDown += new KeyEventHandler(Input_KeyDown);
form.KeyPress += new KeyPressEventHandler(Input_KeyPress);

そして、これらは私の方法です:

private void TimedOut(object sender, EventArgs e)
{
   _barcode = "";
}

private void Input_KeyDown(object sender, KeyEventArgs e)
{
   _timer.Stop();
   _timer.Start();

   if (e.KeyData == Keys.Enter)
   {
      if (!_barcode.Equals(""))
  {
     this.BarcodeScanned(_barcode, new EventArgs());
  }
   }

   else
   {

   }
}

private void Input_KeyPress(object sender, KeyPressEventArgs e)
{
   _timer.Stop();
   _timer.Start();
   _barcode += e.KeyChar;
}
4

1 に答える 1

1

上記のコードは機能します...空白のフォームで。ただし、特にページに他のコントロールがある場合は、主要なイベントに干渉する可能性のあるものがいくつかあります。それを確認してください

  • AcceptButtonプロパティがフォームに設定されていません(これにより、Enterキーがトラップされます)
  • TabStopに設定されたフォームにコントロールtrueがないこと(実行可能ではないかもしれませんが、試してみてください)
  • 入力時にフォームにフォーカスがあること(説明が表示される可能性は低いですが、とにかく確認してください)
  • その焦点は、入力時にフォーム内のコントロールに焦点を当てることはありません。TextBox
  • 他のコントロールがKeyPressまたはKeyDownイベントを処理しようとしていないこと、および他のカスタムイベントがコード内の他の場所で構成/設定されていないこと

私が気づいたことの1つは、あなたがそのようにイベントを登録しているということです。

form.KeyDown += new KeyEventHandler(Input_KeyDown);

これは、別の場所からこのフォームをインスタンス化し、呼び出し元のコードにキーイベントを送信するようにフォームを取得しようとしていることを意味します。formインスタンスがプライベートクラスレベルの変数などに永続化/保存されていることを確認しますか?

于 2013-03-05T21:54:19.400 に答える