自己写了一个控件,用到了SSTAB,并且在SSTAB中动态地添加和删除控件。
现在能够成功地添加控件,并添加到指定的TAB页中;也能够成功地删除控件。
问题是:当我成功地删除控件后,当鼠标点了SSTAB刚才被清空一个TAB页之后,程序就崩溃,弹出一个“应用程序错误”窗口,显示“"0x66065c5f"指令引用的"0x00000034"内存。该内存不能为"read"”
请问大家有没有什么经验或者建议。不胜感谢!相关代码如下:'测试代码
Private Sub btnAddInfos_Click()
    Call HostInfoControl1.AddInfo(0, "测试", "中国要在二要中国要在二要中国要在二要中国要在二要中国要在二要中国要在二要")
    Call HostInfoControl1.AddInfo(0, "内存", "内存信息")
    Call HostInfoControl1.AddInfo(0, "硬盘", "空间信息1")
    Call HostInfoControl1.AddInfo(1, "CPU", "CPU使用信息CPU使用信息CPU使用信息CPU使用信息CPU使用信息CPU使用信息CPU使用信息")
    Call HostInfoControl1.AddInfo(1, "CPU", "CPU使用信息2")
    Call HostInfoControl1.AddInfo(0, "硬盘", "空间信息2")
    Call HostInfoControl1.AddInfo(1, "HTTP", "HTTP服务")
    Call HostInfoControl1.AddInfo(2, "HTTPS", "HTTPS服务HTTPS服务HTTPS服务HTTPS服务HTTPS服务HTTPS服务HTTPS服务")
    Call HostInfoControl1.AddInfo(0, "硬盘", "空间信息3")
    Call HostInfoControl1.AddInfo(2, "HTTPS", "HTTPS服务2")
    HostInfoControl1.CurrTab = 0
End SubPrivate Sub btnClearInfos_Click()
    Call HostInfoControl1.ClearInfos
End Sub'部分控件代码(HostInfoControl)
'##########################################################################
'#
'#  Name: ClearInfos
'#  Description: 清除在SSTAB的各页中的消息项
'#  Input:
'#  Output:
'#  Return:
'#          执行成功时返回true
'##########################################################################
Public Function ClearInfos() As Boolean
    Dim ix As Integer
    Dim objLabel1 As Label
    Dim objLabel2 As Label
    
    ClearInfos = False
    For ix = 1 To m_InfoNames.Count
        Controls.Remove "lblInfoName" & CStr(ix)
        Set objLabel1 = m_InfoNames.Item(1)
        Set objlable1 = Nothing
        m_InfoNames.Remove 1    '如果把此行代码注释则不会出现崩溃
    Next
    For ix = 1 To m_InfoMsgs.Count
        Controls.Remove "lblInfoMsg" & CStr(ix)
        Set objLabel1 = m_InfoMsgs.Item(1)
        Set objlable1 = Nothing
        m_InfoMsgs.Remove 1    '如果把此行代码注释则不会出现崩溃
    Next
    For ix = 1 To m_MsgInfos.Count
        m_MsgInfos.Remove 1
    Next
    m_InfoCount = 0
    ClearInfos = True
End Function'##########################################################################
'#
'#  Name: AddInfo(TabIndex, InfoName, InfoMsg)
'#  Description: 在SSTAB的指定页中增加一个消息项的方法
'#  Input:
'#          TabIndex:       SSTAB的Tab顺序,从0开始
'#          InfoName:       消息项目名称
'#          InfoMsg:        消息项的内容
'#  Output:
'#  Return:
'#          执行成功时返回true
'##########################################################################
Public Function AddInfo(ByVal TabIndex As Integer, ByVal InfoName As String, ByVal InfoMsg As String)
    On Error GoTo ErrorHandle
    
    Dim intLastTabInfo As Integer
    Dim intPrevBottom As Long
    Dim objLabel1 As Label
    Dim objLabel2 As Label
    
    If (TabIndex < 0 And TabIndex > TabCount - 1) Then
        AddInfo = False
        Exit Function
    End If
    intLastTabInfo = LastIndexOfMsgInfos(TabIndex)
    intPrevBottom = 0
    If (intLastTabInfo > 0) Then
        Set objLabel1 = m_InfoNames.Item(intLastTabInfo)
        intPrevBottom = objLabel1.Top + objLabel1.Height
        Set objLabel2 = m_InfoMsgs.Item(intLastTabInfo)
        If (intPrevBottom < objLabel2.Top + objLabel2.Height) Then
            intPrevBottom = objLabel2.Top + objLabel2.Height
        End If
        intPrevBottom = intPrevBottom + m_VInterval
    End If
    If (intPrevBottom = 0) Then
        intPrevBottom = m_InfoNameTop
    End If
    
    
    tabGroup.object.tab = TabIndex
    Set lblInfoName = Controls.Add("VB.Label", "lblInfoName" & CStr(m_InfoNames.Count + 1), tabGroup)
    With lblInfoName
        .Left = InfoNameLeft
        .Top = intPrevBottom    'intPrevTop + 300
        .AutoSize = True
        .Caption = InfoName
        .Visible = True
    End With
    m_InfoNames.Add lblInfoName, CStr(m_InfoNames.Count)
    
    Set lblInfoMsg = Controls.Add("VB.Label", "lblInfoMsg" & CStr(m_InfoMsgs.Count + 1), tabGroup)
    With lblInfoMsg
        .Left = InfoMsgLeft
        .Top = intPrevBottom
        .AutoSize = True
        .BorderStyle = 1
        .BackColor = &H80000018
        .Caption = InfoMsg
        .WordWrap = True
        If (.Width + .Left > picMain.Width - 300) Then
            .Width = picMain.Width - .Left - 300
        End If
        Debug.Print "Width:" & .Width
        .Visible = True
    End With
    m_InfoMsgs.Add lblInfoMsg, CStr(m_InfoMsgs.Count)
    
    Call AddMsgInfo(TabIndex, InfoName, InfoMsg)
    AddInfo = True
    Exit Function
ErrorHandle:
    Debug.Print Err.Description
    AddInfo = False
End Function