2008-09-26 4 views
3

Je voudrais structurer un formulaire avec un TabControl mais j'aimerais éviter que chaque contrôle de chaque TabPage soit membre du formulaire auquel j'ajoute TabControl. Jusqu'à présent, j'ai identifié ces options, s'il vous plaît commenter ou suggérer des alternatives:Comment gérer les contrôles .NET TabPage qui se retrouvent tous dans une classe Form?

1) un UserControl pour chaque TabPage

2) Laisser seulement le contrôle sur la principale forme, mais tourner le public variable de contrôle et cut et passé tout le code réel dans des classes séparées

3) Forgó le concepteur de formulaire et tout faire à l'exécution

4) Déduire de tabPage (pas sûr si cela fonctionne et quelles sont les implications en temps de conception sont)

Merci à tous,

Andrew

Répondre

3

Dans toute application WinForms complexes, vous aurez probablement courir dans le problème de trop de contrôles sur un formulaire. Non pas que vous tombiez dans une limite stricte, mais plutôt que vous rencontriez un point douloureux - tel que vous le décrivez.

Dans la plupart des scénarios, pour moi, votre option # 1 - un contrôle utilisateur pour chaque page à onglet - est l'approche la moins douloureuse. Il vous permet d'encapsuler les pannes logiques des contrôles à leur manière, en les évaluant de manière appropriée. L'inconvénient de ceci est que vous finirez probablement par exposer soit ton de propriétés sur votre contrôle utilisateur. La sortie de ce problème est assez simple, cependant: Utilisez une classe personnalisée pour représenter les données qui sont "liées" audit contrôle, puis exposez une seule propriété pour l'instance liée de la classe.

Vous aurez une meilleure architecture dans l'ensemble, vous serez plus maintenable, et en bonus, vous ne perdrez pas de temps à essayer de faire fonctionner le formulaire. :)

EDIT:

Je dois souligner que vous pouvez finir par avoir besoin d'exposer certains événements personnalisés des contrôles utilisateur qui représentent vos pages onglet. Essentiellement, s'il existe un contrôle sur l'onglet dont l'événement est requis par le formulaire parent, vous devrez créer un événement et le lever pour que le formulaire parent le sache. Ce n'est pas très difficile, mais peut ajouter des LOC significatifs aux contrôles de l'utilisateur.

2

L'option 1 est la meilleure car elle vous permet d'utiliser le concepteur pour mettre en page le contenu de UserControl et facilite également le travail de différents développeurs sur différentes instances UserControl en même temps.

L'option 2 est une mauvaise idée car si vous voulez changer la disposition, le concepteur va générer du nouveau code et votre couper-coller devra être corrigé manuellement.

L'option 3 va être 10 fois plus de travail que d'utiliser le concepteur pour organiser la mise en page.

L'option 4 n'a aucun avantage sur UserControl mais vous devez apporter des modifications à la classe TabPage afin de lui permettre de fonctionner comme surface de conception. Je voudrais donc m'en tenir à l'option 1.

Questions connexes