存在vb6集合并设置了布尔值

存在vb6集合并设置了布尔值,vb6,Vb6,我是vb6新手,所以对你们中的一些人来说可能是显而易见的。我有一个集合问题,试图将项目放入集合中,然后评估该项目是否存在,并将按钮设置为启用或不启用 守则: For Each vBookmark In lstAssign.SelBookmarks '--------------------------------------- 'filtering with agency code and crew code. sAssignmentValue = lstAssign

我是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方法看起来像

colParameters.Add sValue, sValue
  • 但请注意,如果要添加重复的值,这将不起作用。钥匙必须是唯一的
填充集合项的键后,可以使用利用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

您必须调整它,因为您没有发布关于集合可能的方法/属性的任何信息…colParameters.Add(sValue)字符串值是一个没有索引的“123-ABC”值,因此每次转到该方法时,它都会返回错误,因为它只能由col(index)而不是col(value)访问。确定,我已经用你所说的更新了我的答案。。。您应该使用
col(index)=val
,而不是使用
col(index)=val来访问值,并且是否故意触发错误也是无效的@jac我尝试了这个版本,看起来更清晰,我没有问题在另一边抛出异常,我会得到我的假布尔值,在任何情况下,我想模拟一个键,因为我有一个网格,我的BL是如果用户选择两个具有相同值的项,按钮应该被禁用。但是,如果您的解决方案恰好单击了集合中不存在的一个项目,那么它将在某个时候启用“我的按钮”。无论如何,谢谢你。