Combobox winsock分割阵列

Combobox winsock分割阵列,combobox,vb6,client-server,winsock,Combobox,Vb6,Client Server,Winsock,我的服务器上有此代码,用于创建更新消息 StrMsg = "1~Server~" For x = 0 To Combo1.ListCount - 1 If x = Combo1.ListCount - 1 Then StrMsg = StrMsg & Combo1.List(x) Else StrMsg = StrMsg & Combo1.List(x) & "~" End If Next x ' send i

我的服务器上有此代码,用于创建更新消息

StrMsg = "1~Server~"

For x = 0 To Combo1.ListCount - 1
    If x = Combo1.ListCount - 1 Then
        StrMsg = StrMsg & Combo1.List(x)
    Else
        StrMsg = StrMsg & Combo1.List(x) & "~"
    End If
Next x


' send it to every connected clients
For x = 0 To clientCounter - 1
    sckClients(x).SendData StrMsg
Next x
客户端将收到它,然后将其放在ComboBox1上

Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Dim strMsg As String, tmp() As String, i As Integer

    sckClient.GetData strMsg$, vbString
    tmp$() = Split(strMsg$, "~")

    For i% = 1 To CInt(tmp$(0)) - 1
        Combo1.AddItem tmp$(i%)
    Next i%

    sckClient.GetData strData, vbString

End Sub
但是为什么我总是得到运行时错误13类型不匹配

这里怎么了-_-

Split()函数返回字符串数组类型的变量,而不是字符串数组。除此之外,我会删除变量的类型声明符号——它们是旧版本BASIC的翻版

Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
    Dim strData    As String
    Dim strMsg     As String
    Dim vastrTmp   As Variant
    Dim i          As Integer

    sckClient.GetData strMsg, vbString
    vastrTmp = Split(strMsg, "~")

    For i = 1 To CInt(vastrTmp(0)) - 1
        Combo1.AddItem vastrTmp(i)
    Next i

    sckClient.GetData strData, vbString

End Sub

我有几个问题:

  • 就像jac问的:你在哪一行得到错误

  • 为什么循环到CInt(tmp$(0))-1 在您发布的代码中,您发送的字符串始终以1开头,因此tmp$(0)将始终为1,因此您将从1看向0(永远不会)

  • 为什么在DataArrival结束时再次调用GetData

使用带有split()的字符串数组很好,我甚至比使用变量更喜欢它。 使用变量声明总是一件好事:它使您的代码更易于阅读,并且当VB在未声明变量的情况下处理(缓慢的)变量时,它会稍微快一点

就我所见,唯一的类型不匹配可能来自CInt() 尽管你发布的代码永远不会让它到达那里

将CInt()替换为Val(),不应再出现类型不匹配的情况,但请注意,任何非数字值都将转换为0


也就是说:我用你的代码创建了一个项目,在调试中没有得到任何类型不匹配的代码。特别检查tmp(0)的值。如果这没有帮助,你会在哪一行得到错误?