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 :

[C#][VS2005]afficher le premier Noeud d'un TreeView


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut [C#][VS2005]afficher le premier Noeud d'un TreeView
    bonjour !

    J'aimerai pouvoir afficher le premier noeud d'un arbre sachant qu'il y a plusieurs noeuds racines. Je m'explique avec un exemple :

    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
     
    -noeud1
          -noeud11
               -noeud 111
               -noeud 112
               -noeud 113
               ...etc.
          -noeud12
          -noeud13
          -noeud14
    -noeud2
          -noeud21      
          -noeud21
          -noeud21
          -noeud21
          -noeud21
          -noeud21
          -noeud21
          ....etc.
    donc, dans cet exemple simplifié, j'ai deux noeuds racines : noeud1 et noeud2.
    Imaginez maintenant que dans noeud2, il y a une cinquantaine d'enfants. j'ai fait en sorte que lorsque je déploie le noeud2 (expandAll() ) le noeud1 se referme (collapseAll() ). Seulement -et là se trouve la bizarrerie - neoud1 n'est plus affiché. C'est Noeud2 qui se retrouve en haut du control. Hors, j'aimerai qu'il le soit tout le temps, cet andouille de Noeud1.
    J'ai tout essayé, du EnsureVisible() au TreeView.SelectedNode = Noeud1 en passant par une simulation du OnMouseWheel(e) pour remonter l'ascenseur, mais rien n'y fait ! J'ai d'ailleur remarqué que c'est un comportement générale de Windows. Ne serait-ce que dans VS2005, lorsqu'on déploie l'arbre de l'explorateur de projet avec de nombreux enfant, le "cadre" du treeview se cale sur le noeud que l'on vient de déployer...

    voilà, en espérant avoir été clair, et si quelqu'un a une nouvelle piste... merci !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    Re-bonjour à tous !

    Bon, je me suis auto-résolu le problème. Mais je donne la solution que j'ai trouvé au cas où quelqu'un en a besoin, ou si ça intéresse, ou pour donner du boulot aux modos ...

    Donc, je suis parti du principe que c'est un comportement habituel du Treeview, d'afficher la plus grande partie possible d'un arbre lorsque l'on déploie la racine (donc affichage à partir de Noeud2 lorsqu'on le déploie).

    Pour remonter au niveau du noeud1 et l'afficher tout de même, rien de tel qu'un bon coup de molette de souris. Alors j'ai simulé cette molette. Pour cela, il faut importer la dll User32.dll de windows (code non managé), et utiliser la methode static SendMessage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [System.Runtime.InteropServices.DllImport("user32.dll")]
            static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
    le problème, c'est de trouver le bon message à envoyer. Une courte recherche sur Google m'a permis de le trouver.
    Donc il faut déclarer la variable suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public const int WM_MOUSEWHEEL = 0x20a;
    0x20a étant le code héxadécimal correspondant à ce message.

    Reste plus qu'à envoyer le message au bon moment ! Pour cela, j'ai surchargé la methode "OnAfterExpand", comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected override void OnAfterExpand(System.Windows.Forms.TreeViewEventArgs e)
            {
                base.OnAfterExpand(e);
                SendMessage(this.Handle, WM_MOUSEWHEEL, 0x780000, 0x21f01fc);
     
            }
    Et le tour est joué ! y'a peut être des failles dans le résonnement, notament le fait que le message est envoyé dès qu'un noeud est déployé (vive les déploiements en cascades ! ! ) mais pour le moment ça fonctionne.

    En attendant d'avoir mieux, et pour résumer, les parties de codes, recollées ensembles :


    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
     public class MonTreeView : System.Windows.Forms.TreeView
        {
            public const int WM_MOUSEWHEEL = 0x20a;
     
     
     
     
            #region send message
     
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
     
            #endregion
     
            #region overrided methods
     
     
            protected override void OnAfterExpand(System.Windows.Forms.TreeViewEventArgs e)
            {
                base.OnAfterExpand(e);
                SendMessage(this.Handle, WM_MOUSEWHEEL, 0x780000, 0x21f01fc);
     
            }
     
            #endregion
        }
    voilà ! ! ! Bon, ben merci beaucoup à moi, tu es beau, tu es grand, tu es fort, tu es génialement doué quand tu veux !



    (ou pas )


    Edit : j'ai été aidé par cette page : http://www.syncfusion.com/faq/window...earch/855.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2007, 18h39
  2. [10][C# VS2005] Afficher la recordFormula ?
    Par v1nce dans le forum SDK
    Réponses: 1
    Dernier message: 27/02/2007, 17h21
  3. Réponses: 4
    Dernier message: 01/06/2006, 14h58
  4. VB6 - Masquer ou Afficher certain(s) noeud(s) d'un Treeview
    Par CBleu dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 17/01/2006, 15h36
  5. [XPATH] ou [XSL] Arret au premier noeud
    Par laurenzo dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 25/04/2005, 16h42

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