vb.net Передача строки между классами

#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. Спасибо за ответ. Похоже, это хорошее направление. Я проверю это и попытаюсь внедрить в свой код.