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 :

Numérotation lexicographique des noeuds d'un treeview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 152
    Par défaut Numérotation lexicographique des noeuds d'un treeview
    Bonjour et meilleurs voeux à tous en ce début d'année 2019.

    Je travaille sur un projet où l'on construit des arbres à l'aide de Treeviews. Je souhaite que chaque noeud possède un champ calculé automatiquement en fonction de sa position dans l'arbre, à savoir son numéro lexicographique.
    Pour fixer les idées, je souhaite faire comme la numérotation auto des paragraphes d'un document Word en mode Plan.

    Je connais la méthode du parcours de graphe en largeur mais j'aimerais savoir s'il n'y a pas une solution plus efficace à base de design pattern OO par exemple. Le point important est que l'utilisateur peut modifier l'arbre par drag'n drop et qu'il faut que la numérotation s'adapte instantanément (comme dans Word).

    Je tente de faire cela avec VB.Net.

    Je n'ai rien trouvé de convainquant dans le web mais sans doute n'ai-je pas frappé aux bonnes portes.

    Comme ce sujet me parait d'intérêt général, je le soumets à votre sagacité. Merci d'avance.

    Bien cordialement.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Le problème est intéressant. D'abord j'espère avoir compris votre notion d'index lexicographique. D'agit-il bien de cela ? :

    1 Noeud1
    |--1.1 Noeud 1.1
    |--1.2 Noeud 1.2
    2 Noeud2
    |--2.1 Noeud 2.1
    |--2.2 Noeud 2.2
    ....|--2.2.1 Noeud 2.2.1
    |--2.3 Noeud 2.3

    A mon sens il y a plusieurs façons d'aborder ce problème en fonction de deux critères : La taille des arbres et surtout du besoin de l'information. Ce que je veux dire c'est que si vous avez besoin de connaître le numéro lexicographique d'un noeud à un instant t, je dirais que le plus simple est de le calculer dynamiquement à la demande :
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'Code C# passé dans un convertisseur VB.NET
    Private Function getPathIndex(ByVal aNode As TreeNode) As String
        Dim result As String = (aNode.Index + 1).ToString()
        Dim aParentNode As TreeNode = aNode.Parent
        While aParentNode IsNot Nothing
            result = (aParentNode.Index + 1).ToString() & "." + result
            aParentNode = aParentNode.Parent
        End While
        Return result
    End Function
    En revanche, si vous avez besoin de tous les numéros lexicographique d'un treeview à un instant t, l'approche sera différente : précalcul de l'info, stockage au niveau des noeuds, gestion des modifications de l'arbre, optimisation et éventuellement asynchronisme en fonction de la taille des arbres. Bref, cela peut devenir vite plus compliqué (et plus amusant aussi).

  3. #3
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 152
    Par défaut
    Merci pour votre réponse rapide.
    Vous avez parfaitement compris la question que j'ai soumise.
    Pour tout vous dire, je me lance en VB.Net après avoir longtemps travaillé avec Access + VBA. Je suis donc encore en rôdage sur cette technique de développement et ça va me demander un peu de temps pour tester dans l'environnement .Net

    Le treeview doit pouvoir être modifié par l'utilisateur et aussitôt mis à jour. Le déplacement d'un noeud peut donc remettre en cause un sous-ensemble important de la numérotation.
    Les arbres en question ont des tailles raisonnables : il s'agit de WBS (work breakdown structure = organigrammes techniques) de projets informatiques, on devrait donc pouvoir relancer le calcul global.

    Je reviendrai pour donner une conclusion sur ces test.

    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 152
    Par défaut Numérotation lexicographique des noeuds d'un treeview
    Je n'en suis pas encore aux conclusions mais je reviens quand même sur le sujet parce qu'en y réfléchissant c'est un peu plus compliqué qu'au départ, voici pourquoi.

    L'arbre WBS dont les sommets s'appellent Elements sert à bien d'autres choses qu'à des manipulations par Treeview, par exemple il est la base du diagramme d'activités d'un projet, lui même source d'un planning, d'estimations de charges etc ...
    Donc l'arbre WBS doit être implémenté par un graphe d'objets, dont chaque sommet est instancié depuis la classe Element.

    La question de la numérotation lexicographique servant à référencer chaque élément est donc propre au graphe d'objets plutôt qu'au treeview qui le représente. Par conséquent c'est au niveau du graphe d'objets qu'il faut numéroter et non au niveau du treeview (tout en mettant aussitôt à jour son affichage).

    Je reformule donc le problème comme suit : existe-t-il un moyen simple de faire cette numérotation lexicographique (par design pattern par exemple ?). Dans le cas contraire il me faudra procéder par parcours du graphe complet selon un algorithme classique.

    Qu'en pensez-vous ?

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Après avoir fait quelques tests, j'aurais tendance à dire qu'un parcours complet du graphe pour renumérotation peut paraître un peu brutal mais reste le plus simple à mettre en place et peut être efficace si la structure ne contient pas des millions d'objets :
    Sur un arbre de 336000 "feuilles", il m'a fallut 0.25 secondes pour parcourir l'arbre et calculer les indexes. Pour 5.5 millions de "feuilles" (profondeur de 10 niveaux), 4 secondes.

    A tester donc mais je pense que ça peux valoir le coup de ne pas faire dans le trop compliqué ;-)

  6. #6
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 152
    Par défaut Numérotation lexicographique des noeuds d'un treeview
    Je suis bien d'accord avec vous : moins c'est compliqué mieux on se porte.

    Je précise un point : l'arbre WBS n'est pas sensé être créé par treeview mais plutôt par formulaires imbriqués car il y a plusieurs informations à saisir. Le treeview est plutôt réservé aux modifications dans la structure de l'arbre déjà construit.

    En tout cas merci pour cet échange.

Discussions similaires

  1. [VBA-EXcel] classement des noeuds d'une treeview dans l'ordre alphabétique
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/01/2017, 19h02
  2. Identification pérenne des noeuds d'un TreeView
    Par qi130 dans le forum Delphi
    Réponses: 5
    Dernier message: 01/02/2007, 23h05
  3. Ajouter des noeuds fils à une treeview
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/10/2006, 19h04
  4. Treeview : memoriser l'etat des noeuds d'un treeview
    Par tuxor dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/04/2006, 04h28
  5. Pbs pour Glisser-Deplacer des noeuds dans un TreeView.
    Par psau dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/09/2004, 21h02

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