按钮事件直到第二次点击才显示值 (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
我在 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