2016-08-05 4 views
2

私は、いくつかのタブが表示されるのに十分なタブを持つWinForm TabControlを<>ボタンを使って持っています。TabControl Tab表示にScollを表示

もう1つのアクションとして、最後に表示されたタブをクリックすると、タブが左にスクロールしてそのタブと次のタブが表示されます。しかし、これはうまく動作しますが、最初の(左端に表示される)タブをクリックすると、反対の動作は起こりません。予想されるアクションは、コントロールがクリックされたタブとその前のタブを自動的に表示することです。

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 
関連する問題