2016-11-16 143 views
2

我是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(指数)接近,所以我不能用值“123 ABC”直接访问我的收藏。我不想添加一个整数索引,我想继续简单地访问项目值,但我的存在方法将始终返回false。因此始终禁用我的按钮。

这是如何工作的?

回答

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 
+0

看起来不错我会试试看看它是否有效。 – X10

+0

您必须对其进行调整,因为您未发布任何有关收集可能的方法/属性的信息... –

+0

colParameters.Add(sValue)字符串值是一个没有索引的“123-ABC”值,所以每次去它的方法返回错误,因为它只能通过col(Index)而不是col(Value)来访问。 – X10

0

循环收集工作,但效率不高。如果您在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 
+0

而且不是故意触发错误也效率不高? [源](http://www.xtremevbtalk.com/tech-discussions/298060-performance-degradation-using-error-resume.html) –

+0

@jac我试过这个版本,看起来更清晰,我没有问题,抛出另一方面的异常我会得到我的假布尔值,无论如何,我想模拟一个键,因为我有一个网格,我的BL是如果用户选择两个具有相同值的项目应该被禁用。但是,如果您的解决方案碰巧点击了集合中不存在的一个项目,您的解决方案将在某个时间启用我的按钮。不管怎么说,还是要谢谢你。 – X10