Tcp 按钮事件不是';t在第二次单击之前显示值(vb6)

Tcp 按钮事件不是';t在第二次单击之前显示值(vb6),tcp,vb6,winsock,commandbutton,Tcp,Vb6,Winsock,Commandbutton,我在vb6中创建了一个tcp连接,以便在按下按钮后从磅秤上抓取重量并显示该重量。问题在于,直到第二次(第二次)单击按钮,而不是第一次,重量才会显示。我已经在不同的点上设置了一个断点,在第一次点击按钮时,它会将我带到该断点,因此我知道事件正在按它应该的方式触发,但在第二次点击之前不会显示任何内容。我做了很多研究,但似乎找不到任何人有确切的问题(或解决方案) 我假设您的代码在表单中,您只是声明了一个Winsock类型的新对象。我的代码使用关键字WithEvents声明Winsock变量,以访问Win

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


我假设您的代码在表单中,您只是声明了一个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

您的GetData调用可能在有数据可获取之前执行。查看DataArrival事件。我将sub的名称更改为DataArrival事件,但仍然没有LuckCreat!谢谢你的帮助@jac。按钮开始注册第一次单击。我唯一想提及的是,我删除了tcpc.close命令,因为它向我抛出了错误91。由于某种原因,tcp连接已经自动关闭,因此它不希望我再次关闭它。谢谢
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