2009-08-24 9 views
0

Lors de l'ajout d'un contrôle à mon formulaire, je dois le connecter avec mon code de sauvegarde et de chargement, avec mes structures de données internes et je dois le faire avec tous mes contrôles. Ce scénario viole gravement le principe DRY (ne vous répétez pas) et peut introduire des bugs subtils.WinForms: automatisation des corvées courantes

J'ai eu l'idée de parcourir tous les contrôles dans une boucle foreach, la propriété Name sera la clé et le texte (ou autre selon le type) sera la valeur dans un dictionnaire (filtrage pour l'utilisateur contrôles d'entrée pendant la procédure). De cette façon, je devra sérialiser/désérialiser le dictionnaire pour le sauvegarder/le charger.

Alors, pourquoi je demande? Je suis un débutant et je pense qu'il existe des méthodes plus éprouvées et éprouvées pour accomplir la même tâche que ce que j'ai imaginé.

Et désolé pour mon anglais maladroit, je n'ai pas eu la chance de l'apprendre comme ma première langue.

Merci pour votre aide

Note: Je sais à propos de WPF, mais je dois en tenir à .net 2.0

+0

Cela ressemble vraiment à une solution de liaison de données développée en interne. Avez-vous essayé d'utiliser l'option Sources de données avec votre objet? –

Répondre

0

Idéalement, vous voulez que tous les contrôles à hériter d'une classe de base, la classe de base peut alors gérer tout cela lorsque chaque contrôle est initialisé. Si vous avez besoin du dictionnaire puis passez le dictionnaire dans une méthode, la méthode peut ensuite définir toutes les différentes propriétés requises sur le contrôle.

Si chacun hérite de contrôle, alors la logique est partagée et DRY :)

+0

Bien sûr, mais s'il utilise WinForms, il hérite déjà de classes de base spécifiques. –

+0

La classe de base pourrait hériter de ces classes Par exemple contrôle> MyControl deviendrait contrôle> MySetupBase> MyControl –

1

Il existe déjà de bons exemples pour le faire, voir RealPosition. Nous avons modifié cette source pour faire des sauvegardes de position/contrôle dans notre projet en plaçant simplement un composant sur le formulaire dans le concepteur et en spécifiant les propriétés nécessaires. Regardez les interfaces IExtenderProvider et ISupportInitialize sur MSDN aussi.

Questions connexes