2016-08-05 126 views
2

我有一个WinForm TabControl有足够的选项卡,需要使用<>按钮将一些标签滚动到视图中。TabControl标签显示 - Scoll到视图

作为替代动作,您可以单击最后一个可见选项卡,然后向左滚动选项卡以将该选项卡和下一个选项卡放入视图中。这可以正常工作,但是当您单击第一个(最左侧的可见)选项卡时,不会发生相反的操作。预期的操作将使控件自动显示点击标签和之前的标签。

我可以使用哪些事件或方法来查看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 

所有的印刷性能返回false。

要测试添加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