2010-05-14 5 views
2

Fondamentalement, mon projet est une application MDI Winform où un utilisateur peut personnaliser l'interface en ajoutant divers contrôles et en modifiant la disposition. Je voudrais pouvoir enregistrer l'état de l'application pour chaque utilisateur.Sérialisation des Winforms MDI pour la persistance

Je l'ai fait un peu de recherche et a trouvé ceux-ci:

How to auto save and auto load all properties in winforms C#?

Save WinForm or Controls to File

Au fond de ce que je comprends, la meilleure approche est de sérialiser les données au format XML, cependant les contrôles WinForm ne sont pas sérialisables, donc j'aurais besoin d'utiliser des classes de substitution:

http://www.codeproject.com/KB/dotnet/Surrogate_Serialization.aspx

Maintenant, dois-je écrire une classe de substitution pour chacun de mes contrôles? J'aurais besoin d'écrire une sorte d'algorithme récursif pour sauvegarder tous mes contrôles, quelle est la meilleure approche pour y parvenir? Comment puis-je restaurer toutes les fenêtres, devrais-je utiliser le motif de conception memento pour cela? Si je veux implémenter plusieurs utilisateurs plus tard, dois-je utiliser Nhibernate pour stocker toutes les données d'objet dans une base de données? J'essaie toujours de comprendre le problème et si quelqu'un a une expérience ou un conseil, j'apprécierais grandement, merci

+0

La forme et les contrôles fonctionnent, j'essaie juste de le rendre persistant. – Serge

+0

Il y a aussi l'option de paramétrage de formulaire, mais il a été prouvé qu'il n'est pas assez robuste pour les contrôles que j'utilise. – Serge

Répondre

1

Vous ne voulez pas sérialiser les instances de contrôle réelles. Ils doivent être créés et détruits avec le Form dans lequel ils résident. Plutôt regarder ce que vous laissez l'utilisateur personnaliser. Mise en page et position? Très bien, enregistrez les coordonnées Top et Left pour chaque contrôle avec un identificateur de contrôle. Laissez-vous l'utilisateur ajouter de nouveaux contrôles? Sauvegardez leurs identifiants avec un identifiant de type afin que quand il est temps de recharger, vous pouvez recréer les contrôles à leur position précédente. Que vous utilisiez XML ou un autre format, il n'y a pas de meilleure approche ou de meilleure pratique, choisissez ce qui est logique pour votre projet.

XML se trouve être un format facile à utiliser avec un grand support dans le .Net Framework.

+0

C'est en quelque sorte ce à quoi je pensais aussi, j'essaie juste de trouver la meilleure façon de l'implémenter. Ai-je besoin de créer un objet qui stockerait ces propriétés que je sérialiserais ensuite? Quelle est la meilleure façon de parcourir le formulaire pour capturer tous les contrôles et leurs propriétés? – Serge

+0

Effectuez une itération sur Form.Controls et écrivez leurs propriétés lors de l'itération. L'état de restauration est similaire mais nécessite un peu plus de travail si vous supportez l'ajout de nouveaux contrôles. –

0

Je sais qu'il existe un logiciel, LinsUI Layout Manager, qui gère très bien vos problèmes. Ils ont une version gratuite pour les développeurs intéressés. You can check the site. Bravo

Questions connexes