0

我的服务器上有这段代码,它创建了更新消息

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 类型不匹配?

这里似乎有什么问题?-_-

4

2 回答 2

0

Split() 函数返回 String 数组类型的 Variant,而不是 String 数组。除此之外,我会删除变量的类型声明符号——它们是对旧版本 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
于 2013-09-09T06:44:01.263 回答
0

我有一些问题:

  • 就像江淮问:你在哪一行得到错误?

  • 你为什么在你发布的代码中循环到 CInt(tmp$(0))-1,你发送的字符串总是以 1~ 开头,所以 tmp$(0) 永远是 1,所以你会从 1 到 0 (从来没有)

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

使用带有 split() 的字符串数组效果很好,我什至比使用变体更喜欢它。使用变量声明总是一件好事:它使您的代码更易于阅读,并且在未声明变量时使用(慢)变体使其速度稍快一些

据我所知,唯一的类型不匹配可能来自 CInt() 尽管它不应该与您发布的代码一起到达那里

用 Val() 替换 CInt() 并且您不应该再得到类型不匹配但请注意任何非数字值都将转换为 0

那说:我用你的代码创建了一个项目,没有得到任何类型不匹配

于 2013-09-10T14:25:35.773 回答