Vb.net 扫描二维码添加到DataGridView,如果值已经存在,则停止

Vb.net 扫描二维码添加到DataGridView,如果值已经存在,则停止,vb.net,datagridview,Vb.net,Datagridview,你好,我正在扫描二维码。然后检查代码或值是否在DataGridView中。如果找到了,我需要一个msgbox让我知道它已经被扫描了。如果没有,则继续将其输入到DataGrid并停止或进行某种延迟,以便有时间更改二维码 我的代码将被扫描,但我得到了msgbox循环,必须覆盖摄像头以阻止“垃圾邮件”msgbox。我相信我把代码写错了你能给我什么帮助吗 这就是我需要的。 扫描datagrid中的-->值(如果否,则添加到datagrid并延迟)(如果是,则MsgBox“已在系统中”延迟重新启动) 我的

你好,我正在扫描二维码。然后检查代码或值是否在DataGridView中。如果找到了,我需要一个msgbox让我知道它已经被扫描了。如果没有,则继续将其输入到DataGrid并停止或进行某种延迟,以便有时间更改二维码

我的代码将被扫描,但我得到了msgbox循环,必须覆盖摄像头以阻止“垃圾邮件”msgbox。我相信我把代码写错了你能给我什么帮助吗

这就是我需要的。 扫描datagrid中的-->值(如果否,则添加到datagrid并延迟)(如果是,则MsgBox“已在系统中”延迟重新启动)

我的代码:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If VideoSourcePlayer1.GetCurrentVideoFrame() IsNot Nothing Then
            Dim img As New Bitmap(VideoSourcePlayer1.GetCurrentVideoFrame)
            Dim results As String() = BarcodeReader.read(img, BarcodeReader.QRCODE)
            img.Dispose()
            If results IsNot Nothing AndAlso results.Count > 0 Then
                If results(0).IndexOf("event") <> -1 Then 
                    'Remove verification code and post to listbox
                    results(0) = results(0).Replace("event", "")
                    Dim code As String = results(0)
                    Try
                        If DataGridView2.Rows.Count >= 0 Then
                            For i As Integer = 0 To DataGridView2.Rows.Count - 1
                                Dim CellChange As String = DataGridView2.Rows(i).Cells("CODE").Value.ToString
                                If CellChange.Contains(results(0)) = True Then
                                    Timer1.Stop()
                                    MsgBox("Ticket already in system")
                                    If MsgBoxResult.Ok Then
                                        Timer1.Start()
                                    End If
                                Else
                                    Timer1.Stop()
                                    DataGridView2.Rows.Add(code)
                                    Timer1.Start()
                                End If
                            Next
                        End If
                    Catch ex As Exception
                        MessageBox.Show(e.ToString())
                    End Try
                End If
            End If
        End If
    End Sub
Private Sub Timer1\u Tick(发送方作为对象,e作为事件args)处理Timer1。Tick
如果VideoSourcePlayer1.GetCurrentVideoFrame()不是空的,那么
将img设置为新位图(VideoSourcePlayer1.GetCurrentVideoFrame)
Dim结果为String()=BarcodeReader.read(img,BarcodeReader.QRCODE)
img.Dispose()
如果结果不是零,也不是零。计数>0,则
如果结果(0).IndexOf(“事件”)-1,则
'删除验证码并发布到列表框
结果(0)=结果(0)。替换(“事件”,“事件”)
Dim代码为字符串=结果(0)
尝试
如果DataGridView2.Rows.Count>=0,则
对于i As Integer=0到DataGridView2.Rows.Count-1
Dim CellChange As String=DataGridView2.Rows(i).Cells(“代码”).Value.ToString
如果CellChange.Contains(结果(0))=True,则
计时器1.Stop()
MsgBox(“系统中已存在票证”)
如果MsgBoxResult.Ok,则
Timer1.Start()
如果结束
其他的
计时器1.Stop()
DataGridView2.Rows.Add(代码)
Timer1.Start()
如果结束
下一个
如果结束
特例
Show(例如ToString())
结束尝试
如果结束
如果结束
如果结束
端接头

循环之所以发生,是因为在确认消息框后,立即重新激活计时器,这会导致相同的代码再次执行。您应该删除或重新考虑此代码的位置:

If MsgBoxResult.Ok Then
    Timer1.Start()
End If
或者,您可以将最后一次扫描的代码存储在一个变量中,然后在扫描新代码后立即比较这两种代码。如果新代码与旧代码匹配,
退出Sub
并等待下一个勾号