2012-01-02 10 views
2

私はC#バーコードアプリケーションを作成しています。私は "Form1_KeyPress"機能でバーコードを検出するEAN-13の正規表現を持っています。私は、入力がどこから来るのかを検出する仕組みがありません。ここに私の問題があります:バーコードスキャナが改行で終了したデータを送信したときにボタンをデフォーカスする方法

私はdataGridViewに記載されているすべてのフィールドとバーコードをクリアするフォームのリセットボタンを持っています。私がクリックすると、通常どおりフォーカスが得られます。フォーカスがあると、バーコードスキャナでバーコードを読み取ると、各バーコードの最後に改行が表示され、このボタンがクリックされてすべてのフィールドがクリアされます。そのため、読み取られたバーコードはdataGridViewに追加されますが、リセットボタンのアクティブ化のためすぐに削除されます。

私の現在の解決策は、各 "button_Click"機能の最後にある読み取り専用のテキストボックスに焦点を当てることですが、ボタンの "クリック"機能の最後には無関係な行を書きたくありません。何がお勧めですか? (フォームのキーダウン機能でキー入力を禁止することはできません)

+0

KeyPressイベントにテキストボックスがフォーカスされていない場合、そのテキストボックスにフォーカスを合わせることができます。 – Reniuz

答えて

1

フォームのキーストロークイベントでEnterキーを取得することはできません。 Enterキーは、ボタンがクリックされることはありません

private void button_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     e.IsInputKey = true; 
    } 
} 

ボタンに、あなたはそれのためのForm_KeyDownイベントが表示されます。

あなたが追加した場合。

これをすべてのボタンに追加したくないので、単純なUserControlを作成します。これはこのコードが追加された単なるボタンです。

更新

これは、スペースバーでは動作しません。あなたがform.KeyPreview = trueを設定し、追加する場合:

private void form_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Space) 
    { 
     e.Handled = true; 
    } 
} 

を、次にスペースバーは、ボタンを押さないだろうが、それはまだテキストボックスに動作します。

スペースと入力が異なる動作をする理由はわかりません。

+0

ありがとうございます。私はまた、 "e.KeyCode == Keys.Space"ステートメントにスペースボタンが同じ問題を作成するのを防ぐために追加しますが、うまくいきませんでした。何かお勧めしますか? – Mehmed

+0

@Mehmed:スペースバーを扱う答えを更新しました。 – arx

+0

@Mehmed Enterはデフォルトのボタンを押し、Spaceはフォーカスされたボタンを押します。 – CodeCaster

関連する問題