|
แก้ไขครั้งสุดท้ายโดย thawatchai-sena เมื่อ 2020-5-5 16:21
1. อ่านรายชื่อเครื่องอ่านบัตรประชาชนลงบน ComboBox
2. ทำการสั่ง Monitor ด้วยคำสั่ง idcard.MonitorStart()
3. ผูก Sub ReadDataWithPhoto เข้ากับเหตุการณ์ eventCardInserted ด้วยคำสั่ง
AddHandler idcard.eventCardInserted, AddressOf ReadDataWithPhoto
ซึ่งจะทำงานเมื่อมีการเสียบบัตร
4. ผูก Sub Clear เข้ากับเหตุการณ์ eventCardRemoved ด้วยคำสั่ง (ทำงานขณะถอดบัตรประชาชน)
AddHandler idcard.eventCardRemoved, AddressOf Clear
5.ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress ด้วยคำสั่ง (ทำงานขณะอ่านรูปบนบัตรประชาชน)
AddHandler idcard.eventPhotoProgress, AddressOf photoProgress
มาดูโค้ดตัวอย่างกันครับ
ประกาศตัวแปรข้างบนสุดสำหรับอ้างอิงไปยัง Lib ของ ThaiIDCard
Private WithEvents idcard As New ThaiIDCard
สร้าง ComboBox สำหรับเก็บชื่อของเครื่องอ่านบัตร จากนั้นเพิ่มโค้ด และเรียกใช้ในเหตุการณ์ Form_Load ด้วยวิธี ListOfDevices(ชื่อของ ComboBox) 'อ่านรายชื่อเครื่องอ่านบัตรลงไปแสดงบน ComboBox
Sub ListOfDevices(ByVal DeviceCmb As ComboBox)
DeviceCmb.Items.Clear()
DeviceCmb.SelectedIndex = -1
DeviceCmb.SelectedText = String.Empty
DeviceCmb.Text = String.Empty
DeviceCmb.Refresh()
Dim idcard As ThaiIDCard = New ThaiIDCard()
Dim readers As String() = idcard.GetReaders()
If readers Is Nothing Then Return
For Each r As String In readers
DeviceCmb.Items.Add(r)
Next
DeviceCmb.DroppedDown = True
End Sub
จากนั้นเพิ่ม Checkbox 1 อัน และใส่โค้ดนี้เข้าไปครับ เช่นตั้งชื่อ Combobox ว่า "ChkMonitor" โค้ดก็ดังนี้.-
Private Sub ChkMonitor_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkMonitor.CheckedChanged
If ChkMonitor.Checked = True Then
If ChkMonitor.Checked Then
If cmbDiviceList.SelectedItem Is Nothing Then
MessageBox.Show("ยังไม่ได้เลือกเครื่องอ่านบัตรสำหรับอ่านข้อมูล !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
ChkMonitor.Checked = False
Return
End If
'เริ่มทำการ Monitor เครื่องอ่านบัตรประชาชน
idcard.MonitorStart(cmbDiviceList.SelectedItem.ToString())
'ประกาศตัวแปรเก็บข้อมูลบัตร
Dim PersonalData As New Personal
'สั่งให้อ่านข้อมูล+รูปถ่ายบนบัตร
PersonalData = idcard.readAllPhoto
'ตรวจสอบว่่าส่งค่าว่างเปล่ากลับมาหรือไม่ และแสดงผลข้อผิดพลาด
If PersonalData Is Nothing Then
If idcard.ErrorCode() > 0 Then
MessageBox.Show(idcard.[Error]())
End If
Return
End If
'เพิ่มตัวควบคุมฟังชั่นสำหรับ รายละเอียดดังนี้.-
' eventCardInserted เหตุการณ์เมื่อเสียบบัตร
' eventCardRemoved เหตุการณ์เมื่อถอดบัตร
' eventPhotoProgress เหตุการณ์ขณะอ่านบัตรประชาชนให้แสดง ProgressBar
'ผูก Sub ReadDataWithPhoto เข้ากับเหตุการณ์ eventCardInserted
AddHandler idcard.eventCardInserted, AddressOf ReadDataWithPhoto
'ผูก Sub Clear เข้ากับเหตุการณ์ eventCardRemoved
AddHandler idcard.eventCardRemoved, AddressOf Clear
'ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress
AddHandler idcard.eventPhotoProgress, AddressOf photoProgress
Else
If cmbDiviceList.SelectedItem IsNot Nothing Then idcard.MonitorStop(cmbDiviceList.SelectedItem.ToString())
End If
End If
End Sub
จากนั้นเพิ่มอีก 3 Sub ใน Class ฟอร์มนี้ คือ
Sub ReadDataWithPhoto()
Dim PersonalData As New Personal
'ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress
AddHandler idcard.eventPhotoProgress, AddressOf photoProgress
PersonalData = idcard.readAllPhoto
ToolStripProgressBar1.Visible = True
If Not PersonalData Is Nothing Then
With PersonalData
lblCitizenID.Text = .Citizenid 'เลขบัตรประชาชน
'EN
txtPrefixEN.Text = .En_Prefix
txtFirstnameEN.Text = .En_Firstname
txtLastnameEN.Text = .En_Lastname
'TH
txtPrefix.Text = .Th_Prefix
txtFirstName.Text = .Th_Firstname
txtLastName.Text = .Th_Lastname
'ว/ด/ป เกิด
txtBirthDate.Text = .Birthday.ToString("dd/MM/yyyy")
'วันออกบัตร
txtIssue.Text = .Issue.ToString("dd/MM/yyyy")
'วันหมดอายุบัตร
txtExpire.Text = .Expire.ToString("dd/MM/yyyy")
txtAddress.Text = .Address
txtHouseNo.Text = .addrHouseNo
txtVillage.Text = .addrVillageNo
txtLane.Text = .addrLane
txtRoad.Text = .addrRoad
txtTambon.Text = .addrTambol
txtAmphur.Text = .addrAmphur
txtProvince.Text = .addrProvince
PictureBox1.Image = .PhotoBitmap
End With
LogLine("อ่านข้อมูลสำเร็จ")
ElseIf idcard.ErrorCode > 0 Then
Select Case idcard.ErrorCode
Case Is = 256
MsgBox("ยังไม่ได้เชื่อมต่อเครื่องอ่านบัตรประชาชน" & vbCrLf & idcard.Error, vbOKOnly + vbCritical, "Error")
Case Else
MsgBox(vbCrLf & idcard.Error, vbOKOnly + vbCritical, "Error")
End Select
End If
'ปิดการแสดง ProgressBar
ToolStripProgressBar1.Visible = False
End Sub
'เคลียร์ค่าบน Control ให้เป็นค่าว่าง
Sub Clear()
lblCitizenID.Text = ""
'ใส่คำสั่งเคลียร์ค่าบน Control ต่าง ๆ
PictureBox1.Image = Nothing
End Sub
สร้าง ProgressBar ขึ้นมาอีก 1 อันตั้งชื่อว่า PhotoProgressBar1
'แสดง ProgressBard ขณะอ่านรูปถ่ายบนหน้าบัตร
Private Sub photoProgress(ByVal value As Integer, ByVal maximum As Integer)
If txtLog.InvokeRequired Then
If ToolStripProgressBar1.Maximum <> maximum Then
PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
PhotoProgressBar1.Maximum = maximum
End Function))
End If
If ToolStripProgressBar1.Maximum > value Then
PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
PhotoProgressBar1.Value = value + 1
End Function))
PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
PhotoProgressBar1.Value = value
End Function))
End If
Else
If ToolStripProgressBar1.Maximum <> maximum Then ToolStripProgressBar1.Maximum = maximum
If ToolStripProgressBar1.Maximum > value Then ToolStripProgressBar1.Value = value + 1
ToolStripProgressBar1.Value = value
End If
End Sub
|
|