Мне удалось расколоть решение, чтобы заставить это работать. Но это не так эффективно, так как каждый раз проходит через все элементы управления в форме. Кажется, я помню, что в глубине души есть функция VB6 для проверки, является ли элемент управления массивом, но я не могу вспомнить его. Моя функция для всех, кто интересуется, ниже, но мне все равно было бы интересно найти более чистое решение, если это возможно?
Private Function FindIndex(ByRef objCtl As Object) As Integer
For Each ctl As Object In objCtl.Parent.Controls
If objCtl.Name = ctl.Name AndAlso Not objCtl.Equals(ctl) Then
'if the object is the same name but is not the same object we can assume it is a control array
Return objCtl.Index
End If
Next
'if we get here then no controls on the form have the same name so can't be a control array
Return 0
End Function
Ниже приведен эквивалент VB6, если кому-то интересно:
Private Function FindIndex(ByRef F As Form, ByRef Ctl As Control) As Integer
Dim ctlTest As Control
For Each ctlTest In F.Controls
If (ctlTest.Name = Ctl.Name) And (Not (ctlTest Is Ctl)) Then
'if the object is the same name but is not the same object we can assume it is a control array
FindIndex = Ctl.Index
Exit Function
End If
Next
'if we get here then no controls on the form have the same name so can't be a control array
FindIndex = 0
End Function