【问题标题】:vb6 collection exist and boolean value setvb6 集合存在且布尔值集
【发布时间】:2016-11-16 16:08:17
【问题描述】:

我是 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”的集合。我不想添加整数索引,我想保持简单地按项目值访问,但我的存在方法将始终返回 false。因此总是禁用我的按钮。

这是如何工作的?

【问题讨论】:

    标签: vb6


    【解决方案1】:

    乍一看,你应该这样做:

    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
    

    【讨论】:

    • 你必须适应它,因为你没有发布任何关于收集可能的方法/属性的信息......
    • colParameters.Add (sValue) 字符串值是没有索引的“123-ABC”值,因此每次转到该方法时都会返回错误,因为它只能由 col(Index) 访问而是 col(Value)。
    • 好的,我已经用你所说的更新了我的答案......而不是使用col(index).Value = val访问值,你应该使用col(index) = val
    【解决方案2】:

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

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

    填充集合项的键后,您可以使用利用 err 对象的函数。如果您尝试通过键获取集合项并且它存在,则不会引发错误。如果不存在,则抛出 err.number 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
    

    【讨论】:

    • 而且不是故意触发错误也没有效率吗? source
    • @jac 我试过这个版本,看起来更清晰,我在另一边抛出异常没有问题我会得到我的假布尔值,无论如何,我想模拟一个键,因为我有一个网格,我的 BL 是如果用户选择两个具有相同值的项目,则应禁用该按钮。但是,如果您的解决方案碰巧单击了集合中不存在的一项,则您的解决方案将在某个时候启用我的按钮。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多