- PR -

バーコード入力

1
投稿者投稿内容
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-07 12:02
こんにちわ。

バーコード入力で、以下のようなことが実現可能かどうかを教えてください。
実現可能な場合、どのようにすればよいのかアドバイスやサンプルコードの提示をしていただければ幸いです。
よろしくお願いします。

  • バーコードの仕様
    • 先頭2文字:制御文字。バーコードの開始とバーコードの種類(帳票番号など)を区別する。
    • 後尾2文字:制御文字。バーコードの終了。
    • 制御文字の間に、実際の値が入っている。
  • 実現したいこと
    • 先頭2文字からバーコードの種類を判断し、指定された項目(テキストボックス)に出力する。
      これにより、画面のフォーカスが指定された項目になくても指定された項目にセットされる。
    • テキストボックス出力時に、制御文字の削除。(画面に制御文字を出力しない)


#個人的にはできないと思っているのですが…
_________________
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-10-07 18:00
こんな感じでどうでしょうか?
バーコードはキー入力で入ってきますよね。

1)Form.KeyPreview プロパティ でキー入力を FormのControl.KeyDown に流す。
2)FormのControl.KeyDown イベント で処理する。
<開始フラグオフのとき>
KeyEventArgs.KeyData プロパティ
KeyEventArgs.KeyCode プロパティ
KeyEventArgs.KeyValue プロパティ
のどれかでバーコードの開始をチェックする。
 <開始>
 開始ならフラグをセット
 カウンタとバーコードデータ格納バッファを用意する。
 バッファに格納する。カウントアップ。
 KeyEventArgs.Handled = True
<開始フラグオンのとき>
バッファに格納する。カウントアップ。
バーコードの終了をチェック
 <終了>
 バーコードデータ格納バッファを解析
 該当テキストボックスにセット
 フラグをリセット
KeyEventArgs.Handled = True


_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-07 19:16
 私は、この辺の言葉が気になったのですが。。。
引用:

これにより、画面のフォーカスが指定された項目になくても指定された項目にセットされる。


入力項目が複数あって、入力するときには、どこにフォーカスがあるか分からない、ということでしょうか?
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-10-07 20:53
>どこにフォーカスがあるか分からない、ということでしょうか?
これは、フォーカスがFormのどこかのコントロールにない場合も、
必要だと言う意味でしょうか?
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-08 10:06
引用:

Jittaさんの書き込み (2004-10-07 19:16) より:
 私は、この辺の言葉が気になったのですが。。。
引用:

これにより、画面のフォーカスが指定された項目になくても指定された項目にセットされる。


入力項目が複数あって、入力するときには、どこにフォーカスがあるか分からない、ということでしょうか?


そうです。どこにあるかわからないということです。

私の方でも、もう少し考えてみましたので、載せておきます。

FormのKeyPressイベントとTimerコントロール(動的に追加)を使う方法で期待するような動作がとれました。

コード:

Private barcodemode As Boolean = False
Private buff As String = ""
Private timerflg As Boolean = False
Private interval As Integer
Private WithEvents barcodeTimer As Timer

Private Function chkKey(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs, _
ByVal avctl_UkeireNo As Control, ByVal avctl_LotNo As Control) As Boolean
If e.KeyChar = "@" Then
'バーコード入力開始
If Me.barcodemode Then
''--タイマー解除
timerDel()
End If
Me.barcodemode = True
Me.buff = ""
''--タイマー開始
timerSet()
Return True
ElseIf Me.barcodemode AndAlso e.KeyChar = "#" Then
'バーコード入力終了
Dim chr As String = chkBarcodeValue()
If chr = "%" Then
avctl_UkeireNo.Text = Me.buff '
ElseIf chr = "$" Then
avctl_LotNo.Text = Me.buff '
Else
If TypeOf Me.ActiveControl Is TextBox Then
Me.ActiveControl.Text = Me.buff
End If
End If
Me.barcodemode = False
Me.buff = ""
'タイマー解除
timerDel()
Return True
ElseIf Me.barcodemode AndAlso e.KeyChar <> "#" Then
Me.buff &= e.KeyChar
Return True
End If
Return False
End Function

Private Function chkBarcodeValue() As String
If Me.buff.Substring(0, 1) = "$" Then
Me.buff = Me.buff.Remove(0, 1)
Return "$"
ElseIf Me.buff.Substring(0, 1) = "%" Then
Me.buff = Me.buff.Remove(0, 1)
Return "%"
Else
Return ""
End If
End Function

Private Sub barcodeTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles barcodeTimer.Tick
If interval = 15 Then
timerDel()
Else
interval += 1
End If
End Sub

Private Sub timerDel()
Me.barcodeTimer.Stop()
Me.barcodemode = False
timerflg = False
interval = 0
Me.buff = ""
End Sub

Private Sub timerSet()
Me.barcodeTimer.Start()
timerflg = True
End Sub

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

e.Handled = chkKey(sender, e, Me.TextBox2, Me.TextBox3)

End Sub


#まだテストしていないパターンもありますが…

えムナウさん、ご協力頂きありがとうございました。

[ メッセージ編集済み 編集者: トージ。 編集日時 2004-10-08 10:56 ]
1

スキルアップ/キャリアアップ(JOB@IT)