按钮事件直到第二次点击才显示值 (vb6)

Button Event isn't displaying value until 2nd click (vb6)

我在 vb6 中创建了一个 tcp 连接来获取秤上的重量并在按下按钮后显示该重量。问题是直到第二次(第 2 次)单击按钮(而不是第一次)才显示重量。我在不同的地方设置了一个断点,第一次点击按钮时,它会把我带到那个断点,所以我知道事件正在按它应该的方式触发,但直到第二次点击才显示任何内容。我做了很多研究,但似乎找不到任何有确切问题(或解决方案)的人。

Public tcpC As New Winsock
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub CFixPicture_Close()
 tcpC.Close
End Sub

Private Sub CFixPicture_Initialize()
 tcpC.LocalPort = 0
 tcpC.Connect "192.168.0.1", 8000
End Sub

Private Sub CommandButton1_click()

 On Error GoTo errHandler
 Dim strData As String

 tcpC.SendData "S" & vbCrLf
 tcpC.GetData strData
 Text1.Caption = "Weight: " & strData
Exit Sub

 errHandler:
    MsgBox "error:" & Err.Description
End Sub

我假设您的代码在窗体中并且您只是在声明一个类型为 Winsock 的新对象。我的代码使用关键字 WithEvents 声明了一个 Winsock 变量,以访问由 Winsock 对象引发的事件。您感兴趣的特定事件是 DataArrival。当接收到数据时,它由 Winsock 控件触发。我将文本设置为此事件。此外,您不能使用 WithEvents 和 "As New"(无论如何您真的不想使用 As New),因此我在 CFixPicture_Initialize() 方法中设置属性之前创建对象。最后,我添加了在关闭对象后将对象设置为空。

Option Explicit

Private WithEvents tcpC As Winsock

Private Sub CFixPicture_Close()
    tcpC.Close
    Set tcpP = Nothing
End Sub

Private Sub CFixPicture_Initialize()

    Set tcpC = New Winsock
    tcpC.LocalPort = 0
    tcpC.Connect "192.168.0.1", 8000

End Sub

Private Sub CommandButton1_click()

    On Error GoTo errHandler
    Dim strData As String

    tcpC.SendData "S" & vbCrLf

    'there is no data here yet - moved to the DataArrival event
    'tcpC.GetData strData
    'Text1.Caption = "Weight: " & strData

Exit Sub

errHandler:
    MsgBox "error:" & Err.Description
End Sub

Private Sub tcpC_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String

    tcpC.GetData strData
    Text1.Caption = "Weight: " & strData

End Sub