2011-01-06 30 views
0

バーコードの文字列を読み取り、アクティブなテキストボックスに表示するバーコードスキャナがあります。 私が抱えている問題は、そのバーコードをスキャンした直後に使用する必要があることです(ユーザーの「OK」ボタンはありません)。バーコードスキャナが値をテキストボックスに読み取る問題

テキスト変更イベントを実行すると、バーコードの最初の文字がテキストボックスに入力されるとすぐに発生します。 (バーコードが123r54122の場合、テキストボックスに「1」が表示されます)。

バーコードまたは標準長に一貫した終了文字はありません。では、WHOLE文字列が読み込まれたときにメソッドを起動する方法は?

答えて

4

テキストの長さを確認することができます(バーコードでは一定です)。 など。テキストの長さ= barCodeLengthの場合は、スキャンされたイベントを発生させます。

バーコードが可変長である場合は、このような何か試すことができます: 1)

private Timer _timer; 
private DateTime _lastBarCodeCharReadTime; 

2を定義する)は、タイマ

_timer = new Timer(); 
_timer.Interval = 1000; 
_timer.Tick += new EventHandler(Timer_Tick); 

3を初期化)

private void Timer_Tick(object sender, EventArgs e) 
{ 
    const int timeout = 1500; 
    if ((DateTime.Now - _lastBarCodeCharReadTime).Milliseconds < timeout) 
     return; 

    _timer.Stop(); 
    // raise Changed event with barcode = textBox1.Text    
} 

ハンドラを追加4)TextChangedイベントハンドラでこれを追加

+0

これらは、カスタムバーコード、ありませんので、設定された長さ – MichaelMcCabe

+0

です次に、あなたは 1)(例えば改行) 2)バーコードリーダー 3からいくつかのイベントを待つ)新しい文字のためのいくつかのタイムアウトを定義し、バーコードリーダからのいくつかのカスタム文字を待つべきタイムアウトが経過しても新しい文字が追加されていない場合は、スキャンされたイベントが表示され、発生します。例えば。 textchangedイベントを受け取った後にタイマーを開始し、現在のdatetimeを保存し、タイマーでテキストが変更されたかどうかを確認します。 –

+0

パーフェクト。よく働く! – MichaelMcCabe

0

スキャナは情報の読み取りが完了したことを示す信号を送信しませんか?それは、もしそれが終わりの文字の標準的な長さを持っていないなら、確かにでしょう。 とにかく、値をメモリに読み込んで、各文字を受信時に挿入するのではなく、一度にテキストボックステキストを設定する必要があります。

編集;テキストボックスに情報を書き込んだら、テキストボックスイベントを呼び出すと、テキストボックスに書き込むのがなぜですか?

+0

スキャンされたものを取り込み、それをライブテキストボックスに入力するサードパーティのアプリケーションです。私が知っている限り、私はそれを制御できません(完了時などを知っている) – MichaelMcCabe

+0

データが来るのを待つためにタイマーを作成する可能性があります。私が考えることができる実現可能な方法は、制限がなく、エンディング文字もエンディング信号もありません。少しでもハッキーです。 – Rob

+0

うん。私はタイマーのアイディアをしなければならないと思う。 – MichaelMcCabe

1

私が作業したバーコードスキャナは、改行(return/enter)をバーコード文字列の最後に追加します。それが設定されている方法に応じて、(trueにAcceptReturn)のリターンを受け入れるようにテキストボックスを設定し、

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
     doSomething(); 
} 
+0

私はこれを試したが、リターンを検出しなかった。と思うタイマーをする必要があります – MichaelMcCabe

+0

それは奇妙です。文字列を分析しましたか? – dandan78

1

私が使用している唯一のバーコードスキャナー(リンディからUSBモデル)のような何かをリターンを追加することができますか。モードを切り替えるには、スキャナーに付属のリーフレットに印刷された特殊な制御バーコードをスキャンします。

私はC#に精通していませんが、Javaでは、文字が入力されているのとは対照的に、リターンが押されたときに検出するTextEventではなく、ActionEventをリスンすることができます。これは、C#で利用可能な場合、dandan78の提案に代わる簡単な方法です。

関連する問題