IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

ScrollBar sur TreeView et ListView


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut ScrollBar sur TreeView et ListView
    Bonjour à tous,

    entrons dans le vif du sujet

    Dans une Winform, avec : un TreeView sur la gauche et à droite une ListView (mode detail).

    J'ai une ligne dans ma Listview pour chaque ligne du Treeview et je voudrais que quand l'utilisateur scroll l'un, ça scroll l'autre pour que les lignes restent "en face".

    NB: les lignes de la ListView et les item du TreeView font la même hauteur, donc ça "tombe" en face ...

    Mais je trouve pas le moyen d'avoir un "event scroll" sur le Listview et le Treeview.
    D’ailleurs, je ne trouve pas non plus comment définir la position de la scrollbar ?!

    Ci vous avez une idée ou un début de piste ...

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Bonjour,
    alors voici un post qui devrait t'intéresser.

    Il y a déjà apparemment un exemple avec un Treeview, ça doit être la même chose pour une listview.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    //Some Win32 native functions:
     
    [DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    public static extern int GetScrollPos(int hWnd, int nBar);
     
    [DllImport("user32.dll")]
    static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
     
    private const int SB_HORZ = 0x0;
    private const int SB_VERT = 0x1;
     
    //A method which returns a point for the current scroll position:
     
    private Point GetTreeViewScrollPos(TreeView treeView)
    {
        return new Point(
            GetScrollPos((int)treeView.Handle, SB_HORZ), 
            GetScrollPos((int)treeView.Handle, SB_VERT));
    }
     
    //A method to set the scroll position:
     
    private void SetTreeViewScrollPos(TreeView treeView, Point scrollPosition)
    {
        SetScrollPos((IntPtr)treeView.Handle, SB_HORZ, scrollPosition.X, true);
        SetScrollPos((IntPtr)treeView.Handle, SB_VERT, scrollPosition.Y, true); 
    }
     
    //Then when you update your tree, do the following:
     
    Point ScrollPos = GetTreeViewScrollPos(treeMain);
    // write your update code here
    SetTreeViewScrollPos(treeMain, ScrollPos);
    Il ne te reste plus qu'a trouver sur le net un contrôle déjà tout fait ou créer toi même un contrôle personnalisé qui implémente un event Scroll. (Je dois reconnaitre que j'ai pas trop le temps de chercher après pour l'instant )

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    super merci ... je vais déjà tester ça

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Hello ...

    après quelques test : ça marche pas ?!

    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
           [DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
            private static extern int GetScrollPos(int hWnd, int nBar);
     
            [DllImport("user32.dll")]
            private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
     
            private const int SB_HORZ = 0x0;
            private const int SB_VERT = 0x1;
     
            public static int GetTreeViewScrollPos(TreeView treeView)
            {
                return GetScrollPos((int)treeView.Handle, SB_VERT);
            }
     
            public static void SetListViewScrollPos(ListView listView, int scrollPosition)
            {
                SetScrollPos((IntPtr)listView.Handle, SB_VERT, scrollPosition, true); 
                listView.Refresh(); // test ...
            }
    Et dans un timer je test si l'item[0].bound a changé, et si oui, je mets à jour la scrollbar du list view (pour que le list view "suive" la treeview)

    Je vois bien la barre de scroll bouger, mais les items de la listview eux ne bougent pas ...

    J'ai aussi essayé d'ajouter un beginupdate() + endupdate() ... idem ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Bon, j'ai changé mon fusil d'épaule !

    J'ai testé avec la proprieté.TopItem, et les résultats semblaient prometteurs !

    Mais parfois la Listview ne bouge pas ?!

    Est-ce que ça vous parle ?

Discussions similaires

  1. [Forms 6i] icon sur treeview
    Par Process Linux dans le forum Oracle
    Réponses: 2
    Dernier message: 26/01/2006, 12h14
  2. [C#] Question sur le composant listview...
    Par irnbru dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/11/2005, 10h26
  3. ScrollBar sur un TPageControl.TTabSheet
    Par Dionyzos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/07/2004, 17h10
  4. icon dans treeview ou listview
    Par Sebinou dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2004, 00h29
  5. Demande d'info sur treeview
    Par Anaxagore dans le forum IHM
    Réponses: 6
    Dernier message: 28/08/2003, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo