modern - windows form c# example




Comment créer un type de dialogue de préférences d'arborescence en C#? (2)

J'écris une application qui est essentiellement une boîte de dialogue de préférences, un peu comme la boîte de dialogue des préférences de l'arborescence utilisée par Visual Studio. La fonction de l'application est simplement un transfert pour les données d'un périphérique série vers un fichier. Il effectue beaucoup, beaucoup de transformations sur les données avant de les écrire dans le fichier, donc l'interface graphique de l'application est simplement tous les paramètres qui dictent ce que ces transformations devraient être.

Quel est le meilleur moyen de concevoir / coder une boîte de dialogue de préférences arborescentes? La façon dont je l'ai fait est de construire la fenêtre principale avec un contrôle de l'arbre ancré sur la gauche. Ensuite, j'ai créé des contrôles de conteneur qui correspondent à chaque nœud de l'arbre. Lorsqu'un nœud est sélectionné, l'application place le contrôle de conteneur correspondant de ce nœud au premier plan, le déplace vers la bonne position et le maximise dans la fenêtre principale. Cela semble vraiment, vraiment maladroit en le concevant. Cela signifie essentiellement que j'ai des tonnes de contrôles de conteneur au-delà du bord de la fenêtre principale au moment du design que je dois continuer à faire défiler la fenêtre principale pour travailler avec eux. Je ne sais pas si cela a du sens dans la façon dont j'écris ceci, mais peut-être que ce visuel pour ce dont je parle aura plus de sens:

Fondamentalement, je dois travailler avec cette forme énorme, avec des contrôles de conteneurs partout, et ensuite faire un tas de reformatage d'exécution pour que tout fonctionne. Cela semble beaucoup de travail supplémentaire. Est-ce que je fais ça d'une manière totalement stupide? Y a-t-il un moyen plus "évident" de faire cela que j'ai manqué?


Greg Hurlman a écrit:

Pourquoi ne pas simplement afficher / cacher le conteneur approprié lorsqu'un nœud est sélectionné dans la grille? Avoir les contenants tous les tailles appropriées au même endroit, et masquer tout sauf le défaut, qui serait présélectionné dans la grille sur le chargement.

Malheureusement, c'est ce que j'essaie d'éviter. Je cherche un moyen facile de gérer l'interface pendant la conception, avec un minimum de code de reformatage nécessaire pour le faire fonctionner pendant l'exécution.

J'aime la réponse de Duncan parce que cela signifie que la conception de l'interface de chaque nœud peut être complètement séparée. Cela signifie que je n'obtiens pas de chevauchement sur les directives d'accrochage et d'autres avantages de temps de conception.


Je créerais probablement plusieurs classes de panneaux basées sur une classe de base héritant de CustomControl. Ces contrôles auraient alors des méthodes comme Save / Load et d'autres choses comme ça. Si oui, je peux concevoir chacun de ces panneaux séparément.

J'ai utilisé un contrôle Wizard qui en mode design, géré plusieurs pages, de sorte que l'on puisse cliquer ensuite dans le concepteur et concevoir toutes les pages à la fois à travers le concepteur. Bien que cela présente plusieurs inconvénients lors de la connexion du code aux contrôles, cela signifie probablement que vous pourriez avoir une configuration similaire en créant des classes de concepteur. Je n'ai jamais écrit de cours de designer en VS, donc je ne peux pas dire comment ou si ça en vaut la peine :-)

Je suis un peu curieux de la façon dont vous avez l'intention de gérer la charge / sauvegarde des valeurs vers / depuis les contrôles? Il doit y avoir beaucoup de code dans une classe si toutes vos pages sont dans un grand formulaire?

Et encore une autre manière serait bien sûr de générer le code gui comme chaque page est demandée, en utilisant des informations sur ce type de paramètres.





user-interface