Как выбрать и прокрутить только списки в VB (игнорируя все остальные элементы управления)? - PullRequest
0 голосов
/ 23 марта 2012

Моя форма имеет несколько элементов управления, таких как кнопки команд и списки.Я создал кнопки «влево» и «вправо» для циклического перемещения по элементам управления, но затем я понял, что действительно хочу циклически проходить по спискам , игнорируя все остальные элементы управления, которые не являются списками.Вот мой код, но теперь я понимаю, что он циклически перебирает ВСЕ элементы управления, обе кнопки команд, текстовые поля И списки.Как мне сделать так, чтобы он игнорировал все элементы управления, ИСКЛЮЧИТЬ списки.По сути, я заставляю эти кнопки 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 ]

2 голосов
/ 23 марта 2012

Это работает, но только если вы помните, какой элемент управления имеет текущий фокус. Поэтому, если вы также используете мышь или вкладку для циклического управления, вам нужно, чтобы каждый элемент управления использовал событие _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
0 голосов
/ 27 марта 2012

вы не можете создавать свои списки как массив элементов управления

listbox(offset).setfocus
0 голосов
/ 23 марта 2012

Это невозможно в VB6.Если это связано с падением производительности (МНОГИЕ элементы управления в форме), есть способы сделать его более эффективным.Вы можете создать массив / коллекцию элементов управления списками и циклически перемещаться по этому массиву / коллекции.

...