Vb6集合存在和布尔值设置



我是vb6的新手,所以对你们中的一些人来说可能很明显。我有一个集合问题,试图将项目放在一个集合中,然后评估该项目是否存在,并设置一个按钮是否启用。

代码:

For Each vBookmark In lstAssign.SelBookmarks
    '---------------------------------------
    'filtering with agency code and crew code.
    sAssignmentValue = lstAssign.columns("AgencyCode").Value & lstAssign.columns("CrewCode").Value
    'Show/hide value depending on crew existance.
        If Not ExistsStartLocation(colParameters, sValue) Then
            bEnableMyButton =  True
            colParameters.Add (sValue)  
        Else
            bEnableMyButton =  False
        End If
    '----------------------------------------
Next

sAssignmentValue = ""
tbrMain.TbrButtonEnabled "XXX", bEnableMyButton

tbrMain.TbrButtonEnabled "YYY", bEnable
Set colStartLocationParameters = Nothing
Exit Sub
Private Function ExistsStartLocation(col As collection, index As Variant) As Boolean
    On Error GoTo ErrHandler
    Dim v As Variant
    v = col(index)
    ExistsStartLocation = True
    Exit Function
    ErrHandler:
        ExistsStartLocation = False
End Function

问题是在这个时刻,我只有colParameters(index)可访问,所以我不能访问我的集合与一个值"123-ABC"直接。我不想添加一个整数索引,我想保持简单的按项值访问,但是我的exists方法总是返回false。因此总是禁用我的按钮。

这是如何工作的?

乍一看,您应该做这样的事情:

Private Function ExistsStartLocation(col As collection, val As String) As Boolean
    Dim blnFoundItem As Boolean = False
    For index As Integer = 1 To col.Count
        If col(index) = val Then
            blnFoundItem = True
        End If
    Next
    ExistsStartLocation = blnFoundItem 
End Function

循环收集有效,但效率不高。如果您在Add方法中分配可选的Key值,您也可以将其用作Item方法的索引。在您的示例中,似乎您正在为集合分配字符串,因此添加方法看起来像…

colParameters.Add sValue, sValue
  • 请注意,如果您添加重复的值,这将不起作用。key必须是唯一的

在填充了集合项的键之后,您可以使用一个利用err对象的函数。如果您尝试通过键获取集合项,并且它存在,则不会抛出错误。如果不存在,则抛出错误。5号扔了出去。新函数应该是这样的:

Public Function ItemExists(ByVal vCollection As Collection, ByVal vKey As String) As Boolean
    Dim varItem As Variant
    On Error Resume Next
    varItem = vCollection.Item(vKey)
    ItemExists = (Err.Number = 0)
End Function

最新更新