如何在偶数发生时自动更新文本框?

时间:2014-02-04 03:44:22

标签: vb.net textbox event-handling

好吧所以我设置了一个事件处理程序,当连接到计算机串口的设备收到带有此代码的文本消息时触发该事件处理程序:

   Private Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)

    Dim rxString As String
    Dim index As Integer
    Dim newMsg As New SMSMessage

    RemoveHandler SMSPort.DataReceived, AddressOf DataReceivedHandler

    Thread.Sleep(100)
    rxString = SMSPort.ReadExisting()
    rxString = TrimCRLF(rxString)

    index = NewSMSIndex(rxString)
    If index > -1 Then

        newMsg = ReadSMS(index)
        If newMsg.Index > -1 Then
            SMS.Clear()
            SMS.Add("Index: " & newMsg.Index & vbCrLf)
            SMS.Add("Phone Number: " & newMsg.PhoneNum & vbCrLf)
            SMS.Add(newMsg.RxOrTx & ": " & newMsg.MessageDateTime & vbCrLf)
            SMS.Add("Message: " & newMsg.MessageText)

        End If

    End If

    AddHandler SMSPort.DataReceived, AddressOf DataReceivedHandler

End Sub

现在这是一个与我的GUI分开的类的一部分,名为MainWindow,

基本上我无法弄清楚如何在主窗口上使用我写入代码中的“SMS”列表的行来更新文本框。

我想要的是我想要的:

当列表更改时,执行任务:

列表中的每个元素 textbox.appendtext(ELEM) 下一个 然后将文本框显示waht写入其中

1 个答案:

答案 0 :(得分:0)

如果我不误解这个问题,你可以使用Event来实现这个目标。在课程中声明一个您有SMS列表的事件,并在必要时提升事件:

Public Event SMSListChanged(ByVal someString As String)

Private Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
    .....
    RaiseEvent SMSListChanged("Some message to display in MainWindow")
    .....
End Sub

然后在MainWindow中处理SMSListChanged事件:

Private WithEvents myOtherClass As New MyOtherClass
Private Sub DisplayMessage(ByVal message As String) Handles myOtherClass.SMSListChanged
    'TODO: update textbox with message string from parameter
End Sub

此方法的优点是避免您的班级承担更新GUI的额外责任,因此可以使其在某个级别符合Single Responsibility Priciple