Synchroniser (réellement) plusieurs listbox

Signaler
Messages postés
5
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
4 juillet 2006
-
Messages postés
19
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
27 octobre 2006
-
Salut,

La question revient souvent je sais  . En m'inspirant de ce qui est proposé à droite à gauche, force est de constater qu'il s'agit plutot de bricolage que d'une réelle synchronisation.

D'après ce que j'ai cru comprendre, avec une listbox on peut certes s'abonner aux Evenements de défilement/mouvements de la souris, mais dès lors qu'on cherche à utiliser les scrollbars des listbox pour synchroniser le défilement ... il semble ne pas y avoir d'abonnements possible à tout ce qui est Scrollable dans une listbox.
Je me trompe peut être, j'espère bien d'ailleurs, mais existe-t-il un moyen d'empecher l'affichage d'une scrollbar sur une listbox ? l'idée était d'utiliser une unique scrollbar pour synchroniser leur défilement à toutes.

Si vous avez des pistes sur le sujet, ou mieux, si vous pouviez me donner tord au sujet des abonnements scrollables d'une listbox, je vous en remercie.

2 réponses

Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
Bonjour,

Je ne crois pas qu'il soit possible d'empêcher l'affichage de la scrollbar verticale dans une ListBox (on peut simplement forcer son affichage, même lorsque la liste n'est pas pleine, en mettant la propriété ScrollAllwaysVisible à true, mais pas le contraire).

Je ne crois pas non plus qu'il existe un évènement déclenché par le scrolling (l'évènement Scroll existe uniquement pour les contrôles dérivés de ScrollableControl, dont la ListBox ne fait pas partie...).

Si tu ne veux pas utiliser le "bricolage" (qui consiste par exemple, dans le gestionnaire de l'évènement MouseWheel d'une ListBox, à envoyer un message WM_MOUSEWHEEL à l'autre ListBox), il te reste éventuellement la possibilité de créer ton propre contrôle.
Messages postés
19
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
27 octobre 2006

Bonjour,
j'imagine répondre un peu tard, mais ça peux toujours aider quelqun...

Donc, j'ai réussi à empêcher l'affichage automatique de la vertical ScrollBar d'une ListBox. Je me suis inspiré de - ce post qui donne la solution en VB.

Voici la version en C# :

- Importer System.Runtime.InteropServices

- Déclarer :
                    [DllImport("user32.dll", SetLastError = true)]
                    private static extern long ShowScrollBar(IntPtr hwnd, int wBar, bool bShow);

et

                    private const int SB_HORZ = 0;
                    private const int SB_VERT = 1;
                    private const int SB_BOTH = 3;

- Enfin utiliser    ShowScrollBar (VotreListBox.Handle, SB_VERT, false);

-