我需要修改一个VB6应用程序,并且在控件数组上一再碰壁。
我知道数组的事件处理程序包括其索引值,我可以在那里设置某些变量,但我应该能够直接访问OptionButton数组中选择的单选按钮。目前我正在这样做:
For i = 0 To optView.Count - 1
If optView.Item(i).value = True Then
currIndex = i
Exit For
End If
Next
这真的是我唯一的选择吗?
我需要修改一个VB6应用程序,并且在控件数组上一再碰壁。
我知道数组的事件处理程序包括其索引值,我可以在那里设置某些变量,但我应该能够直接访问OptionButton数组中选择的单选按钮。目前我正在这样做:
For i = 0 To optView.Count - 1
If optView.Item(i).value = True Then
currIndex = i
Exit For
End If
Next
是的,这是我们唯一的选择。控件数组对象不包含任何选择逻辑(这有道理,因为“selected”可能对不同的控件意味着不同的东西)。我唯一会做的更改就是用 For Each
替换 For
。
我曾经使用的另一种方法是编写一个函数,然后调用该函数,传入控件名称以返回索引号。这样,您可以在将来重复使用它,特别是如果将其添加到模块(.bas)中。
Function f_GetOptionFromControlArray(opts As Object) As Integer
' From http://support.microsoft.com/KB/147673
' This function can be called like this:
' myVariable = f_GetOptionFromControlArray(optMyButtons) 'Control syntax OK
' myVariable = f_GetOptionFromControlArray(optMyButtons()) 'Array syntax OK
On Error GoTo GetOptionFail
Dim opt As OptionButton
For Each opt In opts
If opt.Value Then
f_GetOptionFromControlArray = opt.Index
Exit Function
End If
Next
GetOptionFail:
f_GetOptionFromControlArray = -1
End Function