我该如何选择&仅循环浏览VB中的列表框(忽略所有其他控件)?

时间:2012-03-23 11:16:37

标签: vb6 listbox controls

我的表单有一堆控件,如命令按钮和列表框。我创建了一个“左”和“右”按钮来循环控制,但后来我意识到我真的只想循环遍历列表框,忽略所有其他不是列表框的控件。这是我的代码,但我现在意识到它循环遍历所有控件,包括命令按钮,文本框和列表框。如何使它忽略除列表框之外的所有控件。基本上,我正在使这些L和R按钮只循环列表框,有点像使用Tab和Ctrl + Tab来回循环。

Private Sub FocusListBoxByTabIndex(offset As Long)
Dim ctrl As VB.Control

For Each ctrl In Me
    If TypeOf ctrl Is ListBox Then
        If ctrl.TabIndex = lastFocus.TabIndex + offset Then
            ctrl.SetFocus
            Exit Sub
        End If
    End If
Next
End Sub

Private Sub Command2_Click()  'left button
    FocusListBoxByTabIndex -1
End Sub

Private Sub Command3_Click()   'right button
    FocusListBoxByTabIndex 1
End Sub  

3 个答案:

答案 0 :(得分:2)

这样可行,但前提是您还记得当前焦点的控件。 因此,如果您还使用鼠标或制表符循环控件,则需要每个控件使用_GotFocus事件,然后设置CurTabIndex。

Private CurTabIndex As Integer

Private Sub Form_Load()
    CurTabIndex = 0
End Sub

Private Sub FocusListBoxByTabIndex(offset As Long)
    Dim ctrl As VB.Control
    Dim FirstControl As VB.Control

    For Each ctrl In Me
        If TypeOf ctrl Is ListBox Then
            If offset > 0 Then
                If ctrl.TabIndex >= CurTabIndex + offset Then
                    If FirstControl Is Nothing Then
                        Set FirstControl = ctrl
                    ElseIf FirstControl.TabIndex > ctrl.TabIndex Then
                        Set FirstControl = ctrl
                    End If
                End If
            Else
                If ctrl.TabIndex <= CurTabIndex + offset Then
                    If FirstControl Is Nothing Then
                        Set FirstControl = ctrl
                    ElseIf FirstControl.TabIndex < ctrl.TabIndex Then
                        Set FirstControl = ctrl
                    End If
                End If
            End If
        End If
    Next

    If Not FirstControl Is Nothing Then
        CurTabIndex = FirstControl.TabIndex
        FirstControl.SetFocus
    End If
End Sub

Private Sub Command2_Click()  'left button
    FocusListBoxByTabIndex -1
End Sub

Private Sub Command3_Click()   'right button
    FocusListBoxByTabIndex 1
End Sub

答案 1 :(得分:0)

这在VB6中是不可能的。如果这是由于性能损失(表单上有许多控件),有一些方法可以提高效率。您可以创建一个列表框控件的数组/集合,并循环遍历该数组/集合。

答案 2 :(得分:0)

无法将列表框创建为控件数组

listbox(offset).setfocus