2016-08-05 21 views
2

Ich habe eine WinForm TabControl, die genug Registerkarten hat, dass einige Registerkarten in Ansicht mit den <> Schaltflächen gescrollt werden müssen.TabControl Tab Anzeigen - Scroll in Ansicht

Als alternative Aktion können Sie auf die letzte sichtbare Registerkarte klicken und die Registerkarten nach links scrollen, um diese Registerkarte und die nächste Registerkarte anzuzeigen. Dies funktioniert jedoch einwandfrei, die umgekehrte Aktion tritt nicht auf, wenn Sie auf die erste Registerkarte (ganz links) klicken. Eine erwartete Aktion würde für das Steuerelement automatisch die angeklickte Registerkarte und die vorherige anzeigen.

Welche Ereignisse oder Methoden kann ich verwenden, um zu sehen, ob die TabPage-Registerkarte sichtbar ist und um die TabPage-Registerkarte auf dem Bildschirm zu scrollen?

Hier einige Forschungscode:

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 

Alle der gedruckten Eigenschaften false zurück.

Um zu testen, fügen Sie eine tabcontrol mit mehreren Registerkarten, Formular anzeigen und machen es dünn genug, dass die <> -Schaltflächen oben rechts angezeigt und eine Bildlauf bewegt die erste Registerkarte aus der Sicht.

Antwort

0

Weil, wenn Sie selectedIndex auf -1 setzen, Ihre Referenz auf tabcontrol1.selected tabindex auch geändert.

'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