2014-08-28 49 views
2

所以我有一個用戶控件。 在窗體中,我有這些usercontrols的控件數組。控件的每個實例都在設計器中設置了一個索引。在運行時獲取控件數組中的用戶控件的索引

我希望在運行時獲取特定用戶控件的索引(這是在For Each循環的上下文中)。但是,「index」不是UserControl類的成員。我該如何做到這一點,以便我可以在運行時獲得索引?什麼我試圖做

例子:

for each UserControl in UserControls 
    OtherArray(UserControl.index) = UserControl.value 
next UserControl 

回答

2

Index屬性是ControlExtender對象的成員,但不是用戶控件。

您可以通過正確輸入變量的景氣指數:

Dim UserControl As MyUserControlType 
Dim UserControl2 As Control 

For Each UserControl In UserControls 
    Set UserControl2 = UserControl 
    OtherArray(UserControl2.index) = UserControl.value 
Next UserControl 

你仍然需要用戶控件類型的變量來訪問 Value屬性。

以前的方法不再有效。

由於用戶控件可以訪問其Index通過其Extender對象,你可以添加調用者可以使用一個附加屬性:

Public Property Get MyIndex() As Long 
    MyIndex = Extender.Index 
End Property 

這訪問它:

Dim MyUserControlInstance As MyUserControl 
Dim OtherArray() As String 
ReDim OtherArray(0 To 3) 

For Each MyUserControlInstance In MyUserControlArray 
    OtherArray(MyUserControlInstance.MyIndex) = MyUserControlInstance.Value 
Next MyUserControlInstance 
+1

哦,對於一個有着健全的繼承體系的語言。 感謝您尋找我正在尋找的答案。 – CMaster 2014-09-17 10:22:17

+0

所以我接受了這個,暗示它對我有用。但現在嘗試,我得到「數據類型不匹配」錯誤的線'set usercontrol2 = usercontrol' – CMaster 2015-09-17 08:47:00

+0

只有一年晚了.. :)在這裏測試它,我得到了同樣的結果。我可能在對我的帖子進行消毒時打破了它。有一刻... – Deanna 2015-09-17 08:56:16

0

在VB6大多數控件都有Tag屬性。 (這是一段時間,所以我不記得用戶控件是否也有這個屬性。)

如果他們這樣做,可以在表單設計器中將Tag屬性設置爲與數組索引相同的值。

如果用戶控件沒有Tag屬性,則可以在程序啓動時循環訪問數組,並在每個用戶控件中設置其中一個控件的Tag屬性。例如,選擇一些Label或TextBox控件來保存整個Uset控件的「Tag」屬性。

+0

好,它是一個用戶控件,我可以給它一個標籤屬性(或「ActualIndex」或其他)。只是想知道是否有更好的方法,尤其是Usercontrols(I).index是有效的。 – CMaster 2014-08-28 12:17:03

0

嘗試使用一個for循環,並通過索引來訪問它們:

For I = UserControls.LBound To UserControls.UBound 
    'Use I as the index here 
Next 

注意,如果數組是不連續的(中間有些指標未加載),您將需要檢測錯誤,跳到下一個項目。

+0

不安全,因爲由於各種原因,控制數組可能不具有這兩個邊界之間的所有值。對於控制數組,正確的格式將是usercontrols.Ubound。 ubound(usercontrls)不適用於控制數組。 – CMaster 2014-09-03 10:20:51

-2

「name」屬性如何?在ControlsCollection中,每個控件都有一個名稱。

dim i as long 
dim found as boolean 
for i = lBound(OtherArray) to uBound(OtherArray) 
    for each UserControl in UserControls 
    if OtherArray(i).name = UserControl.name then 
     found = true 
     exit for 
    end if 
    next UserControl 
    if found then exit for 
next UserControl 
+0

該名稱對於控件數組中的所有控件都是相同的。你應該使用'Is'來檢查對象實例是否相同。 – Deanna 2014-09-04 08:46:42