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

VB.NET Discussion :

Suppression noeud TreeView


Sujet :

VB.NET

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut Suppression noeud TreeView
    Bonjour,

    J'ai un TreeView contenant de multiples étages de noeuds et je cherche à supprimer un des "derniers enfants".

    Sachant que je connais le nom ce noeud enfant (qui est unique), je fais simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tree_utilisateurs.BeginUpdate()
    tree_utilisateurs.Nodes(fiche.SelectedTab.Text).Remove()
    tree_utilisateurs.EndUpdate()
    Il me répond:

    La référence d'objet n'est pas définie à une instance d'un objet.
    D'où vient le problème?
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je ne crois pas que l'indexeur de Nodes fasse une recherche récursive... à mon avis ça cherche seulement dans les noeuds racines.

    Par contre il y a une méthode Find qui peut chercher récursivement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tree_utilisateurs.BeginUpdate()
    Dim nodeToRemove As TreeNode = tree_utilisateurs.Find(fiche.SelectedTab.Text, True)
    If nodeToRemove IsNot Nothing Then
        nodeToRemove.Remove()
    End If
    tree_utilisateurs.EndUpdate()

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci je ne connaissais pas cette fonction.
    Je suis allé voir dans l'aide et la syntaxe qui a l'air correcte est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tree_utilisateurs.BeginUpdate()
    Dim nodeToRemove As TreeNode() = tree_utilisateurs.Nodes.Find(fiche.SelectedTab.Text, True)
    If nodeToRemove IsNot Nothing Then
    MsgBox(nodeToRemove.Count)
    'nodeToRemove(0).Remove()
    End If
    tree_utilisateurs.EndUpdate()
    Cependant, il me dit avec ce code que le tableau possède 0 élément. Or il y a bien fiche.SelectedTab.Text.

    Une idée de l'origine du problème?
    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Anduriel Voir le message
    Une idée de l'origine du problème?
    Ce serait pas juste le texte du noeud qui est fiche.SelectedTab.Text ? Ca cherche par la propriété Name, pas Text...

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Je crois comprendre ce que tu veux dire, mais je ne vois pas comment attribuer un Name à un noeud.
    Quand on l'ajoute, on fait simplement Add(texte à afficher)?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    je me demande si on peut éviter une procédure récurrente du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub ScanTrViewForRemoveNod(ByVal nodes As TreeNodeCollection, ByVal textNod As String)
     
            Dim node As TreeNode
            For Each node In nodes
                If node.Text = textNod Then
                    node.Remove()
                    Exit For
                End If
                'Récursivité sur les noeuds enfants.
                ScanTrViewForRemoveNod(node.Nodes, textNod)
            Next
     
        End Sub
    et l'appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScanTrViewForRemoveNod(tree_utilisateurs.Nodes, fiche.SelectedTab.Text)
    en supposant que fiche.SelectedTab.Text soit le text du noeud à supprimer.

  7. #7
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci, cette méthode fonctionne.

    J'ai cependant une questions: dans mon Node je pourrais avoir une centaine d'éléments en tout venant d'une base de données.

    Qu'est ce qui est plus rapide:

    - supprimer l'élément dans la base de donnée, supprimer TOUS les élements dans le TreeView, et aller chercher un nouveau TOUS les éléments dans la bdd

    ou

    - supprimer dans la bdd l'entrée, chercher l'élément dans le TreeView (sur la centaine), et le supprimer?

    Merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Anduriel Voir le message
    Je crois comprendre ce que tu veux dire, mais je ne vois pas comment attribuer un Name à un noeud.
    Quand on l'ajoute, on fait simplement Add(texte à afficher)?
    Il y a plusieurs surcharges de Add, dont une qui prend un nom (key) et un texte. Sinon la plupart des surcharges de Add renvoient un TreeNode, il suffit de setter la propriété Name dessus. Ou encore, tu crées le noeud toi même (new TreeNode), tu affectes le Name, et tu l'ajoutes

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/04/2010, 13h57
  2. Suppression noeud enfant treeview
    Par Gobouz dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/09/2009, 12h15
  3. Réponses: 2
    Dernier message: 11/05/2009, 16h52
  4. recuperer l'identifiant d'un noeud(treeview)
    Par Ismaël(l) dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/02/2007, 13h02
  5. JTree : problème d'affichage ajout/suppression noeud
    Par rnan dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2006, 08h12

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