kevcoder
kevcoder

Reputation: 955

VB6 how to get the selected/checked control in a control array

I have to modify a VB6 app and am repeatedly beating my head against a wall over control arrays.

I know that the event handler for the array includes its index value and I can set some variable there, but i should be able to directly access the selected radio button in an array of OptionButton. Currently I'm doing this

For i = 0 To optView.Count - 1
    If optView.Item(i).value = True Then
        currIndex = i
        Exit For
    End If
Next

Is this really my only option?

Upvotes: 3

Views: 8700

Answers (2)

MikeF
MikeF

Reputation: 1

Another way to do this that I have used. Write a function, and then call the function, passing in the control name, to return the index number. Then you can reuse this in the future especially, if you add it to a module (.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

Upvotes: 0

GSerg
GSerg

Reputation: 78181

Yes, this is our only option. The control array object does not contain any selecting logic (which makes sense, as "selected" might mean different things for different controls). The only change I'd make is replacing the For with For Each.

Upvotes: 3

Related Questions