我的表单有一堆控件,如命令按钮和列表框。我创建了一个“左”和“右”按钮来循环控制,但后来我意识到我真的只想循环遍历列表框,忽略所有其他不是列表框的控件。这是我的代码,但我现在意识到它循环遍历所有控件,包括命令按钮,文本框和列表框。如何使它忽略除列表框之外的所有控件。基本上,我正在使这些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
答案 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