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

C# Discussion :

[C#] Récupérer la racine d'un Treeview


Sujet :

C#

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut [C#] Récupérer la racine d'un Treeview
    Bonjour tout le monde.

    Voilà, je cherche a récupérer la racine d'une hiérarchie de Treeview lorsque je doubleclick sur un noeud de mon tree.
    Pour ce faire, je me suis abonné à l'évènement NodeMouseDoubleClick de mon Treeview.
    Ensuite, dans le code, je vais rechercher l'élément sur lequel je viens de clicker, et je souhaite récupérer sa racine, c'est à dire le premier noeud de sa hiérarchie.
    Pour ce faire, j'ai créé une méthode récursive BacktoRoot à laquelle je passe le noeud courant ( dans mon cas le noeud sélectionné), et je refait appel à BacktoRoot tant qu'il y a un noeud parent. Voici le code de ma méthode:
    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
     
            private TreeNode BacktoRoot(TreeNode e)
            {
                if (e.Parent != null)
                {
                    MessageBox.Show("parent node : \n" + e.Parent.Text);
                    BacktoRoot(e.Parent);
                    return null;
                }
                else
                {
                    MessageBox.Show("root: \n" + e.Text);
                    return e;
                }
            }
    Je fais appel à cette méthode de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    TreeNode racine = new TreeNode();
                    racine = BacktoRoot(e.Node);
    Une fois l'appel de la méthode terminer, donc quand je n'aurais plus de parent pour mon noeud, je souhaite simplement afficher le noeud racine de ma hoérarchie dans le code de traitement de l'évènement. Pour ce faire, je procède comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show("Racine du noeud selectionné: \n" + racine.Text);
    Et la surprise, il me dit:
    La référence d'objet n'est pas définie à une instance d'un objet.
    Je ne sais pas pourquoi il me dit ça, car quand j'affiche mes MessageBox dans la méthode récursive, il me donne la bonne valeur pour la racine.

    Quelqu'un parmi vous aurait-il une idée d'où pourrait provenir mon erreur. Aurais-je oublier quelque chose de super important?

    Je ne vois vraiment pas quoi

    Je vous remercie, une fois encore, d'avance pour l'aide que vous pourrez m'apporter.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Pour la racine c'est TreeView.Nodes[0]

    Tu as fais un débogage pour regarder la valeur de ton noeud ?

  3. #3
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Ben en fait, quand j'affiche la valeur du noeud dans ma méthode, elle est bonne (la valeur), mais dès que je retourne dans mon code de l'évènement, donc la partie ou j'assigne la valeur de retour à la variable racine (de type TreeNode), il me dit que racine vaut null.

    Je vais essayer avec Treeview.Nodes[0]

    Je donne des nouvelles dès que c'est fait.
    Merci pour le conseil.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  4. #4
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Ben voilà, je viens de tester.

    Mais le problème est que j'ai plusieurs racine dans mon TreeView.

    en fait, j'ai mon TreeView qui est construit comme suit:




    Et en fait, quand je click sur un élément, il me retourne toujours comme quoi la racine est "Noob", alors que quand je click sur le fichier "Responsable.txt" qui se trouve dans le noeud "President Hubert", il devrait me retourner President Hubert, et pas Noob.
    Je ne sais pas si vous voyez le problème
    En fait, "Noob" et "President Hubert" sont des répertoires que j'ai sur le disque, et je montre le contenu de ces répertoires dans ma TreeView. Quand je click sur un des noeuds, je voudrais pourvoir afficher les propriétés de l'élément sur lequel je viens de clicker, et pour cela, je voudrais reconstruire le chemin d'accès pour retrouver le fichier.

    Je sais, ça peut paraître tout simple, mais je suis un peu très c** par moment, et là, ben je suis bloquer

    SI vous avez une autre idée, je suis preneur.

    Lorsque j'utilise ma méthode récursive, il me trouve bien la racine correspondante, mais lorsque je retourne celle-ci, elle ne s'assigne pas correctement apparemment.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    L'événement NodeMouseClick contient un propriété qui renvoie le noeud sélectionné, tu utilise ça.

    Tu peux aussi te baser sur la propriété Level d'un noeud (Level renvoie 0 pour Noob, 1 pour Image, Responsable, Spécifications...)

  6. #6
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Et bien voilà, après plusieurs essai je viens de trouver pourquoi cela ne marchait pas.

    En fait, il me retournait null en résultat de la méthode BacktoRoot car l'élément était effacer lors du retour, ceci du fait que la variable était en locale à la méthode.
    Fallait y penser.
    Il m'a donc suffit de déclarer une variable de type TreeNode en private à ma classe, et ensuite, dans la méthode BacktoRoot, placer le résultat du noeud racine dans cette variable.
    Je suis d'accord que c'est la façon la plus barbare du monde de procéder, mais n'ayant pas le temps de me prendre la tête sur des imbécilité du genre, j'attendrais toujours voir si meilleur solution se pose à moi.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/02/2008, 09h24
  2. Réponses: 2
    Dernier message: 28/08/2007, 12h56
  3. Comment récupérer la scrollBar d'un treeview?
    Par mrrenard dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/01/2007, 13h40
  4. [DOM] Récupérer la racine avec DOM
    Par Thanos DeTitan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/05/2006, 11h20
  5. Récupérer la sélection d'un TreeView
    Par nostroyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 12h30

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