Lier ScrollBars DatagridVew et TableLayoutPanel

Résolu
Squal0 Messages postés 14 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 7 juin 2013 - 8 août 2012 à 00:27
Squal0 Messages postés 14 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 7 juin 2013 - 9 août 2012 à 02:34
Bonjour à tous,

J'utilise actuellement VS2010 et j'ai dans ma Form 1 DatagridView et un TableLayoutPanel.
Les 2 ont la ScrollBar d'activée mais j'aimerais que si je descend dans l'un ça descende aussi dans l'autre et inversement.

J'ai réussi à trouver un exemple pour lier les ScrollBars de 2 DatagridView qui ressemble à ceci :

Private Sub dgv1_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles dgv1.Scroll
    
        if (dgv2.FirstDisplayedScrollingRowIndex <> dgv1.FirstDisplayedScrollingRowIndex)
            dgv2.FirstDisplayedScrollingRowIndex = dgv1.FirstDisplayedScrollingRowIndex
End Sub

Private Sub dgv2_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles dgv2.Scroll
    
        if (dgv1.FirstDisplayedScrollingRowIndex <> dgv2.FirstDisplayedScrollingRowIndex)
            dgv1.FirstDisplayedScrollingRowIndex = dgv2.FirstDisplayedScrollingRowIndex
End Sub
    

J'ai donc compris qu'il fallait utiliser "FirstDisplayedScrollingRowIndex" du coté du DatagridView mais je n'arrive pas à trouver ce qu'il faut utiliser du coté du TableLayoutPanel pour faire la comparaison.

J'ai essayé "TableLayoutPanel.VerticalScroll.Value" ou "TableLayoutPanel.AutoScrollPosition.Y" mais ça ne marche pas.

Je cherche donc l’équivalent de "FirstDisplayedScrollingRowIndex" pour un TableLayoutPanel, si quelqu'un a une idée ça m'aiderait énormément :)

Merci par avance pour vos réponse

2 réponses

Squal0 Messages postés 14 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 7 juin 2013
9 août 2012 à 02:34
Bon ben je me réponds encore tout seul mais, des fois que ça puisse aider quelqu'un, j'ai réussi à trouver une manière toutes simple pour contourner ce problème :
- mettre un Panel (et pas un grpbox pke pas de scroll) dans la fomr et y poser le TLP + le DGV dedans
- activer l'autoscroll du Panel et désactiver celui du TLP + du DGV
Et hop ! juste 1 scrollbar pour tout et y'a pas de problème de synchro entre les 2
3
Squal0 Messages postés 14 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 7 juin 2013
8 août 2012 à 01:52
Rectification après un petit nouveau test ... je me rapproche de but mais y'a encore d'la marge :)

j'ai maintenant comme code :
Private Sub TableLayoutPanelLbl_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles TableLayoutPanelLbl.Scroll
        If SaveUsersDataGridView.FirstDisplayedScrollingRowIndex <> TableLayoutPanelLbl.VerticalScroll.Value Then
            SaveUsersDataGridView.FirstDisplayedScrollingRowIndex = TableLayoutPanelLbl.VerticalScroll.Value
        End If
End Sub

Private Sub SaveUsersDataGridView_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles SaveUsersDataGridView.Scroll
        If TableLayoutPanelLbl.VerticalScroll.Value <> SaveUsersDataGridView.FirstDisplayedScrollingRowIndex Then
            TableLayoutPanelLbl.VerticalScroll.Value = SaveUsersDataGridView.FirstDisplayedScrollingRowIndex
        End If
End Sub

J'ai dû passer à coté tout à l'heure car maintenant le TableLayoutPanle et le DatagridView descendent tout les 2 mais le défilement est plus rapide dans le DatagridView que dans le TableLayoutPanel.
En regardant de plus près, j'ai vu que la dernière ligne du TableLayoutPanel ne fait pas la même hauteur que les autres (c'est peu être car dans la collection de ligne du TableLayoutPanel j'ai mis 2 ligne : la 1ere de 22px en absolue et la 2eme en autosize, y'a que comme ça que j'arrive à bien afficher toutes les lignes mise à part la dernière qui s’étale sur la place restante). Ce qui explique du coup pourquoi ça semble défiler moins vite vu qu'il y a plus de "distance" à faire défiler.

Si quelqu'un à une idée pour mon problème et n’hésitez pas à me demander si mon explication est confuse (c'est pas toujours facile d'expliquer son problème, quand on a le nez dedans tout parait clair )
0
Rejoignez-nous