所以我有一个用户控件。 在表单中,我有一个这些用户控件的控件数组。控件的每个实例都在设计器中设置了索引。
我想在运行时获取特定用户控件的索引(这是在For Each循环的上下文中)。然而,"索引"不是UserControl类的成员。我该怎么做才能在运行时获取索引?
我想要做的例子:
for each UserControl in UserControls
OtherArray(UserControl.index) = UserControl.value
next UserControl
答案 0 :(得分:2)
Index
属性是Control
和Extender
对象的成员,但不是用户控件。
您可以通过正确键入变量来获取索引:
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 :(得分:0)
VB6中的大多数控件都有Tag属性。 (已经有一段时间了,所以我不记得用户控件是否也拥有此属性。)
如果有,您可以在表单设计器中将Tag属性设置为与数组索引相同的值。
如果用户控件没有Tag属性,则可以在程序启动时循环遍历数组,并在每个User Control中设置其中一个控件的Tag属性。例如,选择一些Label或TextBox控件来保存" Tag"整个Uset Control的属性。
答案 2 :(得分:0)
尝试使用for循环并按索引访问它们:
For I = UserControls.LBound To UserControls.UBound
'Use I as the index here
Next
请注意,如果数组不连续(中间的某些索引未加载),则需要检测错误并跳到下一个项目。
答案 3 :(得分:0)
我建议对上面的代码进行一些改进:
如果UserControl不在数组中,则Extender.Index会导致错误。 如果Usercontrol不在数组中,则MyIndex返回-1。
公共属性只要获取MyIndex()
出错时转到ToAnAnArrayNoIndexError
MyIndex = Extender.Index
出错时转到0
退出物业
NotAnArrayNoIndexError:
出错时转到0
MyIndex = -1
最终属性
答案 4 :(得分:-2)
"名称"属性。在ControlsCollection中,每个Control都有一个名称。
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