0

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

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

バーコードの一貫した終了文字、または標準の長さはありません。では、WHOLE文字列が読み込まれたときに、メソッドを起動するにはどうすればよいでしょうか。

4

4 に答える 4

4

テキストの長さを確認できます(バーコードでは一定だと思います)。たとえば、TextChangeイベントをサブスクライブし、text length = barCodeLengthの場合、Scannedイベントを発生させます。

バーコードの長さが可変の場合は、次のように試すことができます。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イベントハンドラーにこれを追加します

private void textBox1_TextChanged(object sender, EventArgs e)
{    
    _lastBarCodeCharReadTime = DateTime.Now;
    if (!_timer.Enabled)
        _timer.Start();
}
于 2011-01-06T12:05:32.853 に答える
1

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

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   if (e.KeyChar == (char)Keys.Return)
      doSomething();
}
于 2011-01-06T12:09:44.470 に答える
1

私が使用した唯一のバーコードスキャナー(LindyのUSBモデル)は、構成方法に応じて返品を追加することも、追加しないこともできます。モードを切り替えるには、スキャナーに付属のリーフレットに印刷されている特別なコントロールバーコードをスキャンします。

私はC#に精通していませんが、Javaでは、TextEventの代わりにActionEventをリッスンして、文字が入力されているのではなく、returnが押されたことを検出できます。これは、C#で利用できる場合、dandan78の提案よりも簡単な代替手段になります。

于 2011-01-06T12:23:23.653 に答える
0

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

編集; 受信時に情報をテキストボックスに書き込んでいる場合は、テキストボックスイベントを呼び出します。なぜわざわざテキストボックスに情報を書き込むのでしょうか。完全なバーコードであると判断したら、イベントを直接呼び出すだけです

于 2011-01-06T12:08:18.197 に答える