質問: タイトルの件、C#でWindows Forms画面の開発で 画面にフォーカスが当たっている状態でハンディーターミナルなどでバーコード入力を受け付けると 所定のテキストボックスに自動で入力値を入力するような機能を検討しております。 ポイントはテキストボックスにフォーカスが当たっている状態でバーコード入力を するのではなく、画面にフォーカスがあたっている(画面をアクティブにしているだけ)で バーコード入力を受け付けることができるかということです。 (テキストボックスにフォーカスがあたっていれば本機能は実現できております。) この機能を実装する場合、Windows Formsのどのイベントを利用すれば 実現できるかアドバイス頂けますと助かります。 ご教示よろしくお願いいたします。
回答: バーコードリーダーはキーボードとして接続されているように思われますので、`Form`の`KeyPreview`プロパティに`true`を設定して`KeyDown`や`KeyPress`イベントを発生させれば入力を検知することができるかと思います。 質問の場合は入力用の`TextBox`が存在するようですので、最初の一文字でフォーカスを移動してやればよいです。受け付ける文字種は想定されるバーコードに合わせて変更してください。 ``` public Form1() { InitializeComponent(); // この2行はデザイナーで設定する this.KeyPreview = true; this.KeyPress += Form1_KeyPress; } private void Form1_KeyPress(object sender, KeyPressEventArgs e) { // イベントが未処理でTextBoxにフォーカスがなく、入力文字がa-zの場合 if (!e.Handled && !textBox1.Focused && 'a' <= e.KeyChar && e.KeyChar <= 'z') { textBox1.Focus(); textBox1.AppendText(e.KeyChar.ToString()); e.Handled = true; } } ```