Donc, j'ai un formulaire en VB qui est visible sauf lorsque le programme est démarré silencieusement, auquel cas le formulaire est toujours chargé mais les interactions sont faites de manière programmée. Cependant, dans un petit nombre de cas, je veux que les formulaires créés à l'intérieur du formulaire invisible soient visibles. Quel est le meilleur moyen d'accomplir cela, idéalement sans créer de nouveaux formulaires. Certaines idées auxquelles j'ai pensé mais je n'aime vraiment pas :
-
Créer un nouveau formulaire, passer le hwnd de ce formulaire pour qu'il héberge des fenêtres applicables. Très facile à faire, probablement assez flexible. Toujours moche.
-
Appeler manuellement le formulaire visible, extraire les valeurs, transmettre les données remplies par l'utilisateur au formulaire invisible. Cette solution est probablement la plus simple, mais c'est aussi un hack. C'est une solution terrible si elle est utilisée pour plus qu'un petit nombre de formulaires, mais elle le fera probablement.
-
Créer une nouvelle classe, refactoriser les formulaires pour être déclenchés par des événements.
-
Définir le formulaire principal comme visible, mais détourner sa fonction de chargement pour qu'il n'affiche rien en réalité.
-
Ne pas utiliser du tout le formulaire invisible, refactoriser le code pour mieux séparer la fonctionnalité du formulaire de l'utilisation. En vérité, c'est déjà largement vrai, mais je ne vois pas de moyen de le faire complètement sans un certaine répétition avec la manière dont les classes sont utilisées, car je finirai par avoir besoin de deux classes différentes qui incluent la même fonction. Probablement la solution la plus idéaliste, cependant.
-
Ce que j'ai fini par faire : Intégrer un appel shell execute à l'endroit concerné qui lance une nouvelle instance d'une copie du programme qui a été compilée avec différents drapeaux. Ce n'est pas aussi mauvais que cela puisse paraitre. Une partie du problème avec toute autre solution est que CHAQUE fois que je veux ajouter une nouvelle interface utilisateur à mon code, je dois créer une nouvelle classe de contrôleur qui gère les événements pertinents différemment. La majorité de l'interface du programme est déjà séparée de son implémentation, mais créer une nouvelle interface utilisateur nécessite l'ajout de gestionnaires d'événements supplémentaires, et ainsi de suite. De toute évidence, cela nécessiterait probablement seulement environ 3 gestionnaires d'événements pour demander à l'utilisateur d'entrer des informations lorsque les événements sont déclenchés.
Éditer : Dans une certaine mesure, j'ai mal exprimé mon problème : Le problème est que je veux récupérer une partie de mon interface utilisateur existante, mais pas toute. Ainsi, rendre invisibles les parties que je ne veux pas que l'utilisateur voie mais rendre visibles les menus qui apparaissent. Découpler les composants individuels de l'iinterface utilisateur augmentera probablement la complexité du programme.