#vb.net #forms #class #visual-studio-2019
#vb.net #формы #класс #visual-studio-2019
Вопрос:
Я полностью застрял в относительно простой задаче при обработке последовательной связи. Что-то, что без каких-либо проблем в VB6, но я не могу найти решение для VB.net
Что я хочу сделать:
1/ Создайте приложение с несколькими формами, которое управляет инструментом.
2 / Intrument может отправлять сообщения в любое время. Мне нужно перехватывать такие сообщения и передавать их в заданную форму.
Нет никаких проблем, если у меня есть приложение с одной формой, и весь код находится внутри одного класса (формы).
Моя идея состояла в том, чтобы создать модуль или класс, который обрабатывает все события последовательной связи (serialcom) и использует sub или функции из этого модуля или класса во всех формах. Кажется, что он частично работает, но не полностью. Моя текущая проблема заключается в том, что я могу вызывать Subs SerialRead , но я не могу передать результирующую строку куда угодно, кроме MsgBox. Я имею в виду — я могу перехватить входящую строку, я могу показать ее в MsgBox, но я не могу передать ее в текстовое поле. Я проверил сотни потоков и не нашел рабочего решения.
Мои два класса приведены ниже.
Главное окно:
Imports System.Threading
Public Class hlavni
Public sp As New serialcom
Private Sub InitBt_Click(sender As Object, e As EventArgs) Handles InitBt.Click
sp.SP_Open("COM1", 57600)
End Sub
Private Sub ExitBt_Click(sender As Object, e As EventArgs) Handles ExitBt.Click
sp.SP_Close()
Me.Close()
End Sub
Private Sub PowerBt_Click(sender As Object, e As EventArgs) Handles PowerBt.Click
sp.SP_Write("P" amp; vbCr)
End Sub
Private Sub EEpromReadBt_Click(sender As Object, e As EventArgs) Handles EEpromReadBt.Click
sp.SP_Write("E" amp; vbCr)
End Sub
End Class
Класс последовательной связи:
Imports System.IO.Ports
Imports System.Threading
Public Class serialcom
WithEvents SP As New SerialPort
Public WithEvents zprava As String
Public Sub SP_Open(ByVal P As String, ByVal B As Integer)
SP.PortName = P
SP.BaudRate = B
SP.Open()
End Sub
Public Sub SP_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP.DataReceived
ReceivedText(SP.ReadExisting())
End Sub
Public Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
hlavni.outputRTB.Text amp;= [text] 'append text
MsgBox(text)
End Sub
Public Sub SP_Close()
SP.Close()
End Sub
Public Function SP_Read()
Dim zprava As String = SP.ReadExisting
zprava = SP.ReadExisting
Return zprava
End Function
Public Function SP_Write(ByVal Str As String)
SP.WriteLine(Str)
Return Str
End Function
End Class
Приветствуются любые идеи или указания.
Спасибо
Ян
Комментарии:
1. Вы видели документацию в разделе Как: создавать и использовать события ? Он включает в себя пример того, как вызывать и использовать событие, предоставляющее данные.
2. Спасибо за ответ. Похоже, это хорошее направление. Я проверю это и попытаюсь внедрить в свой код.