2016-11-16 114 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