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

Posted

技术标签:

【中文标题】直到第二次单击(vb6),按钮事件才显示值【英文标题】:Button Event isn't displaying value until 2nd click (vb6) 【发布时间】:2015-07-13 19:36:51 【问题描述】:

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

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

【问题讨论】:

您的 GetData 调用可能在获取任何数据之前执行。请参阅 DataArrival 事件。 我将 sub 的名称更改为 dataArrival 事件但仍然没有运气 【参考方案1】:

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

【讨论】:

太棒了!感谢您的帮助@jac。该按钮开始注册第一次点击。我唯一要提到的是我删除了 tcpc.close 命令,因为它向我抛出了错误 91。出于某种原因,tcp 连接已经自行关闭,所以它不喜欢我再次关闭它。谢谢!

以上是关于直到第二次单击(vb6),按钮事件才显示值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Reporting Services报告仅在第二次单击时加载

Div 在使用 ajax 和 django 进行第二次点击后显示/隐藏

单击下一步按钮如何更改图像

UseState 仅在第二次单击时显示

模态仅在第二次单击后显示

在引导模式 ONCLICK 事件中显示动态内容