2010-06-21 5 views
0

J'ai un programme qui surveille les changements de certains fichiers dans une liste de dossiers, y compris les enfants (si un dossier est regardé, il va regarder tous les enfants). Je veux ajouter la possibilité d'exclure certains enfants de ce processus, mais je ne suis pas sûr de la meilleure façon de le traiter ou de stocker les "Règles" pour cela. Par exemple, here'a un arbre que je pourrais regarder:Gérer une liste de dossiers/exclusions, y compris les enfants

Root 
    Folder1 
    SubFolder1 
     File1 
     File2 
    Folder2 
    File3 
    File4 

Je veux permettre à l'utilisateur de sélectionner un dossier (comme « Root »), et il sélectionne automatiquement tous les enfants. Si elles décochent un dossier (comme Folder1), je veux décocher tous les enfants de celui-là, mais si elles vérifient un enfant d'un enfant (comme File1), je veux vérifier tous ses enfants (ou, dans ce cas, il suffit de regarder File1, car il n'a pas d'enfants). J'imagine que je vais stocker ces données sous la forme d'une liste de nœuds où l'utilisateur a effectué une action (soit + ou -), et parcourir la liste des dossiers, un niveau à la fois, jusqu'à ce que je accéder à un noeud où l'utilisateur a effectué une action différente, puis continuer à avancer dans les dossiers/fichiers, en vérifiant à chaque étape si l'utilisateur a pris une action sur ce noeud en particulier, puis en le propageant à tous les sous-nœuds. Si un nouveau dossier/fichier apparaît sous un nœud surveillé, je veux commencer à le regarder, mais s'il apparaît sous un nœud ignoré, je l'ignorerai. Est-ce que je stocke simplement chaque dossier/fichier "activé", ainsi que l'action (regarder/ignorer) que l'utilisateur a prise, puis reconstruire l'arbre entier à chaque fois? Y a-t-il un moyen plus efficace de le faire que je ne suis pas en train de photographier?

Je suis heureux de clarifier si mon explication actuelle de la façon dont je l'imagine pas clair. En outre, j'utilise .NET, mais je suis plus intéressé par le processus général - je vais travailler sur la mise en œuvre.

Répondre

1

Vous devriez être en mesure d'accomplir cela avec la classe TreeView. D'après mon expérience, vous aurez besoin d'ajouter un peu de logique pour mettre à jour les nœuds parents et enfants une fois un nœud est sélectionné, mais cela peut être accompli en attachant un gestionnaire à l'un des TreeView events. Dans une application que j'ai créée dans le passé, je crois que je viens d'utiliser l'événement Click, mais après avoir repensé cela, ce "AfterSelect" aurait pu être une meilleure option. Cependant, il peut y avoir de meilleurs événements disponibles dans la classe TreeNode réelle, mais je n'ai pas encore étudié ces derniers. J'espère que ce message vous permettra au moins de commencer dans la bonne direction. D'un côté, la classe TreeView n'est pas marquée comme étant sérialisable. Cependant, vous pouvez sérialiser le TreeNode racine de TreeView. Par conséquent, vous pouvez enregistrer les options sélectionnées via la sérialisation binaire, la sérialisation XML ou toute autre méthode de votre choix.

+0

C'est ce que j'ai fini par faire - l'arborescence a un ensemble de nœuds de niveau supérieur qui correspondent à des disques physiques, et le processus sérialise chacun vers XML, puis l'enregistre dans un fichier. Puis j'ai écrit un processus qui accepte le treenode qui est dans l'arborescence (une image du disque) et le todeode que vous venez de désérialiser (les paramètres de la dernière fois) et applique les cases à cocher du nœud enregistré au contrôle treeview . Merci de m'indiquer dans la bonne direction! – SqlRyan

Questions connexes