存在vb6集合并设置布尔值

时间:2016-11-16 16:08:17

标签: 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。因此总是禁用我的按钮。

这是如何运作的?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

循环收集有效,但效率不高。如果您在Key方法中指定了可选的Add值,则还可以将其用作Item方法的索引。在您的示例中,您似乎正在为集合分配字符串,因此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