【问题标题】:VB6 Dynamically Adding Winsock ControlVB6动态添加Winsock控件
【发布时间】:2011-09-23 15:52:11
【问题描述】:

我正在使用以下代码动态创建 WinSock 控件,并使用它连接到服务器:

Licenses.Add "MSWinsock.WinSock.1"
Controls.Add "MSWinsock.WinSock.1", "s1"

s1.RemoteHost = "irc.netsplit.de"
s1.RemotePort = "6667"
s1.Connect

但是我得到“错误 424:需要对象。”,突出显示“s1.RemoteHost...”,我该如何解决这个问题?控件应该从前几行添加?

谢谢。

【问题讨论】:

    标签: dynamic vb6 controls winsock add


    【解决方案1】:

    最简单的方法是将套接字控件转储到表单中,从而无需导入许可证并获得严格的输入;

    Controls.Add "MSWinsock.WinSock.1", "s1"
    
    Dim s1 As Winsock: Set s1 = Controls("s1")
    s1.RemoteHost = "irc.netsplit.de"
    

    或者array of sockets 是你的追求?

    【讨论】:

    • 只需Dim s1 As WinsockSet s1 = Controls.Add("MSWinsock.WinSock.1", "myUniqueNameHere") 就足够了。
    【解决方案2】:

    对不起,我的英语不好......

    您可以制作一系列 WinSock 控件。为此,您需要向窗体添加一个控件并将其索引属性分配为 0。然后您可以使用如下语句:

    Load WinSock1(5)
    

    其中 WinSock1 是控件的名称(之前添加到表单中),5 是新控件的数组中的索引(它可以是变量)。这意味着您有多个相同控件的“副本”,您可以单独操作每个控件。之后,您可以像这样使用此控件进行操作:

    WinSock1(5).LocalPort = 80
    Winsock1(5).Listen
    

    并响应这样的事件:

    Private Sub WinSock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
     WinSock1(Index).Close
     WinSock1(Index).Accept(requestID)
    End Sub
    

    在这种情况下Index是控件在数组中的索引,所以你不需要自己去跟踪控件。

    希望这会有所帮助...玩得开心! :)

    【讨论】:

      【解决方案3】:

      您没有声明变量s1。您只是向具有该名称的表单添加了一个控件。您可以使用以下方法检索它:

      Dim s1 As Object
      s1 = Controls("s1")
      

      我的 VB6 生锈了,所以我不确定,这是一个 Object,你是否可以有意义地使用它。

      【讨论】:

        猜你喜欢
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多