2016-08-05 16 views
2

У меня есть вкладка WinForm TabControl, в которой есть достаточно вкладок, которые нужно прокручивать с помощью кнопок <>.TabControl Tab Showing - Scoll in view

В качестве альтернативного действия вы можете щелкнуть по последней видимой вкладке, а вкладки прокрутите влево, чтобы отобразить эту вкладку и следующую вкладку. Тем не менее, это прекрасно работает, противоположное действие не происходит, когда вы нажимаете на первую (самую левую видимую) вкладку. Ожидаемое действие будет означать, что элемент управления автоматически отобразит вкладку с щелчком и одну перед ней.

Какие события или методы можно использовать, чтобы увидеть вкладку вкладки TabPage и прокрутить вкладку TabPage на экране?

Вот некоторые исследования код:

Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged 
    If mbFormLoad Then Exit Sub 
    Dim t As TabPage = TabControl1.SelectedTab 
    Debug.Print(t.Name) 
    Debug.Print("CanFocus:" & TabControl1.TabPages(0).CanFocus) 
    Debug.Print("CanSelect:" & TabControl1.TabPages(0).CanSelect) 
    Debug.Print("IsAccessible:" & TabControl1.TabPages(0).IsAccessible) 
    ' works but causes screen noise 
    If TabControl1.SelectedTab.TabIndex > 0 Then 
     mbFormLoad = True 
     TabControl1.SuspendLayout() 
     TabControl1.SelectedIndex = TabControl1.SelectedTab.TabIndex - 1 
     TabControl1.SelectedIndex = TabControl1.SelectedTab.TabIndex + 1 
     TabControl1.ResumeLayout() 
     mbFormLoad = False 
    End If 
End Sub 

Все печатные свойства возвращают ложь.

Чтобы проверить, добавьте tabcontrol с несколькими вкладками, отобразите форму и сделайте ее достаточно тощей, чтобы кнопки <> отображались в верхнем правом углу, а свиток перемещает первую вкладку вне поля зрения.

ответ

0

Потому что, когда вы установили selectedIndex на -1, ваша ссылка на tabcontrol1.selected tabindex также изменилась.

'TabControl1.SelectedTab.TabIndex = 1 
    TabControl1.SelectedIndex = TabControl1.SelectedTab.TabIndex - 1 
    '1 - 1 = 0 
    TabControl1.SelectedIndex = TabControl1.SelectedTab.TabIndex + 1 
    '0 + 1 = 1 


Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged 
    If mbFormLoad Then Exit Sub   
    Dim t As TabPage = TabControl1.SelectedTab 
    Debug.Print(t.Name) 
    Debug.Print("CanFocus:" & TabControl1.TabPages(0).CanFocus) 
    Debug.Print("CanSelect:" & TabControl1.TabPages(0).CanSelect) 
    Debug.Print("IsAccessible:" & TabControl1.TabPages(0).IsAccessible) 
    ' works but causes screen noise 
    If TabControl1.SelectedTab.TabIndex > 0 Then 
     mbFormLoad = True 
     TabControl1.SuspendLayout() 

     'store the original selected tab index so you can work with an integer 
     Dim index As Integer = TabControl1.SelectedTab.TabIndex 

     TabControl1.SelectedIndex = index - 1 
     TabControl1.SelectedIndex = index + 1 
     TabControl1.SelectedIndex = index 
     TabControl1.ResumeLayout() 
     mbFormLoad = False 
    End If