2015-03-24 3 views
0

Я новичок в vb.net, у меня есть приложение для сбора данных, которое использует данные сканирования на складе. это оконная система, я не мог получить работу обработки событий. Пожалуйста, помогите мне найти, что не так с моей программой ниже.vb.net обработчик события не работает

Вот проект. В приложении у меня есть класс сканера, который я использую для сканирования штрих-кода, а при сканировании происходит событие, позволяющее узнать формы. многие формы могут использовать данные сканирования. Но только вид, видимый сверху, будет обрабатывать отсканированные данные. У меня есть форма бланков форм и форма билета, они оба обрабатывают событие скандаты. Форма первого заказа обрабатывает событие сканирования данных и заполняет текстовое поле сканированного заказа, затем автоматически запускает форму билета, и форма билета предполагает обработку события данных сканирования и отправку данных в форме билета. Форма заказа обрабатывает событие в порядке, проблема заключается в том, что после запуска формы билета автоматически, похоже, не может ассоциироваться с событием, событие все еще похоже на формы заказа. Таким образом, форма билета не показывает его и ничего не делает. Мне нужно использовать LaunchTickets() в форме заказа, чтобы добраться до билета из-за бизнес-запроса. Как реализовать это, чтобы связать событие с правильной формой независимо от формы, видимой сверху в моем приложении? Я не знаю, есть ли способ обойти, если нет, каков наилучший способ реализовать это? пожалуйста, помогите мне получить эту работу.

Public Class ClsComPort 
Public Shared Event NewScanData(ByVal ScanData As String) 

Public Function InitializebcrScanner() As Boolean 
    AddHandler mySerialPort.DataReceived, AddressOf mySerialPort_DataReceived 
End Function 

Private Sub mySerialPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) 
    'omitted steps to get the scanned data 
    ScanData = str.Trim() 
    RaiseEvent NewScanData(scandata) 'raise the scan event 
End sub end class 

    Public Class frmOrder 
Friend WithEvents scanner As New ClsComPort 
Private Sub GetScanData(ByVal ScanData As String) Handles scanner.NewScanData 
    txtOrder.Text = ScanData 'this runs ok, I got the scan data in this field 
    LaunchTickets() 'App automatically go to next form- ticket form, this seems to cause the event handling issue 
End Sub 
Private Sub LaunchTickets() 
    Me.Visible = False 
    frmTickets.WindowState = FormWindowState.Maximized 
    frmTickets.ShowDialog() 
    Me.Visible = True 
End Sub 
     End Class 


    Public Class frmticket 
Friend WithEvents scanner As New ClsComPort 
Private Sub GetScanData(ByVal ScanData As String) Handles scanner.NewScanData 
    txtTicket.Text = ScanData 
    'not working, just nothing happen, and when back to order form, program crashed 
End Sub 
    End Class 
+0

Вы, возможно, потребуется инициализировать скорость передачи данных, размер слова, и четность. – xpda

+0

Я не вижу, где инициализируется 'str'. Вы не используете параметр 'e' из события' dataReceived'. – OneFineDay

ответ

0

Когда вы делаете экземпляр frmticket класса вы подписываетесь на пользовательское событие, но это событие только пожары, когда DataReceived событие срабатывает и что не подключен, пока вы не вызовете InitializebcrScanner (вы не называли его), который должен быть Sub не функцией, так как вы не возвращаете логическое значение или необходимость. Сделайте экземпляр формы не экземпляром по умолчанию.

Private Sub LaunchTickets() 
    Me.Visible = False 
    Dim ticketsForm As New frmTickets 
    ticketsForm.WindowState = FormWindowState.Maximized 
    ticketsForm.ShowDialog() 
    Me.Visible = True 
End Sub 

Это:

Public Function InitializebcrScanner() As Boolean 
    AddHandler mySerialPort.DataReceived, AddressOf mySerialPort_DataReceived 
End Function 

Должно быть в конструкторе:

Sub New() 
    AddHandler mySerialPort.DataReceived, AddressOf mySerialPort_DataReceived 
End Sub 
Смежные вопросы