2009-07-14 8 views
7

Je suis en train d'écrire une petite classe pour conduire des tests d'intégration d'une application de formulaire gagnant. La classe de pilotes de test a accès au formulaire principal et recherche le contrôle qui doit être utilisé par son nom, et l'utilise pour conduire le test. Pour trouver le contrôle, je traverse l'arborescence Control.Controls. Cependant, je suis coincé quand je veux arriver aux contrôles dans une fenêtre de dialogue (un formulaire personnalisé affiché comme une boîte de dialogue). Comment puis-je l'obtenir?Comment puis-je obtenir la référence au formulaire modal actuellement actif?

Répondre

20

Vous pouvez obtenir une référence au formulaire actuellement actif en utilisant la propriété statique Form.ActiveForm. Editer: Si aucun Form n'a le focus, Form.ActiveForm renverra null.
Une façon de se déplacer est d'utiliser la collection Application.OpenForms et récupérer le dernier élément , sorcière sera la Form active lorsqu'elle est affichée à l'aide ShowDialog:

// using Linq: 
lastOpenedForm = Application.OpenForms.Cast<Form>().Last() 
// or (without Linq): 
lastOpenedForm = Application.OpenForms[Application.OpenForms.Count - 1] 
+0

Il semble retourner null quoi que je fasse. Des idées? – Grzenio

+0

Réponse mise à jour lorsque aucun formulaire n'est actif –

+0

Application.OpenForms fonctionne, acclame – Grzenio

0

Je ne suis pas sûr si vous pouvez accéder aux contrôles sur une boîte de dialogue pré-construit; ils semblent tous emballés ensemble. Vous aurez peut-être plus de chance de construire votre propre boîte de dialogue qui fera ce que vous voulez. Ensuite, vous pouvez accéder aux .Controls à l'intérieur de celui-ci.

+0

Oui, j'utilise des formulaires personnalisés qui s'affichent sous la forme d'une boîte de dialogue. – Grzenio

0

me corrigera si je me trompe, Cependant, il semble que vous essayez d'accéder aux contrôles sur le formulaire de dialogue quand ce n'est pas tout à fait possible. Ce que je veux dire par là, ShowDialog va "retarder" le thread sur lequel le formulaire a été créé et ne retournera pas le contrôle à l'application (ou à votre classe de test) jusqu'à ce que le traitement de ShowDialog soit terminé, auquel cas votre code d'utilisateur continuerait sur son chemin. Essayez d'accéder ou de manipuler les contrôles à partir d'un thread séparé (dans ce cas, refactorisez la classe de pilote de test pour générer un thread distinct pour chaque nouveau formulaire qui doit être affiché et testé).

+0

Oui, j'ai créé un nouveau thread, donc ce n'est pas bloqué. Je cherchais la réponse fournie par @Julien Poulin – Grzenio

+0

Aussi, si vous disposez du formulaire parent, la méthode dispose sera exécutée même avec un formulaire modal actif. C'est possible, vous voudrez peut-être accéder au formulaire modal alors. – mike100111

Questions connexes