Synchroniser (réellement) plusieurs listbox

Csl91 Messages postés 5 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 4 juillet 2006 - 4 juil. 2006 à 17:36
hmarchal Messages postés 19 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 27 octobre 2006 - 27 oct. 2006 à 12:10
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

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
5 juil. 2006 à 11:15
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.
0
hmarchal Messages postés 19 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 27 octobre 2006
27 oct. 2006 à 12:10
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);

-
0
Rejoignez-nous