11
votes

Comment puis-je obtenir la référence à une forme modale actuellement active?

J'écris une petite classe pour la conduite de tests d'intégration d'une application de formulaire Win. La classe de pilotes de test a accès à la forme principale et lève le contrôle qui doit être utilisé par son nom et l'utilise pour piloter le test. Pour trouver le contrôle, je traverse l'arbre Control.Controls. Cependant, je suis bloqué lorsque je veux vous rendre à des contrôles dans une fenêtre de dialogue (un formulaire personnalisé indiqué sous la forme d'une boîte de dialogue). Comment puis-je m'en tenir?


0 commentaires

3 Réponses :


0
votes

Je ne sais pas si vous pouvez accéder à des contrôles dans une boîte de dialogue pré-construite; Ils semblent tous emballés ensemble. Vous pouvez avoir plus de chance de construire une boîte de dialogue de votre choix qui fait ce que vous voulez. Ensuite, vous pouvez accéder aux .controls à l'intérieur.


0 commentaires

32
votes

Vous pouvez obtenir une référence à la forme actuellement active à l'aide de la statique form.activeform propriété.

Edit: Si aucun Formulaire a la mise au point, formulaire.ActiveForm retournera null .
Un moyen de contourner ce problème consiste à utiliser la collection Application.OpenForms et récupérer l'élément DERNIER , sorcière sera le formulaire actif quand il est Affiché à l'aide de showdialog : xxx


7 commentaires

Il semble retourner nul quoi que je fais. Des idées?


Réponse mise à jour lorsqu'aucun formulaire n'a la mise au point


Les commandes sur la forme que vous souhaitez accéder devraient probablement avoir un accès public sur eux, si vous ne l'avez pas déjà fait.


J'ai utilisé la commande et j'ai jeté une exception. L'intervalle était de placer une forme au début de la ligne. Formulaire lastopenedform = Application.openformS.Cast (). Dernier ()


Pouvons-nous obtenir la boîte de dialogue Enregistrer le fichier (déjà ouvert), comme nous obtenons les formulaires à l'aide de l'application.OpenForms?


@Jay, non, car sauvegardefiledialog est un formulaire , c'est une boîte de dialogue Windows natif.


@Julienpoulin, merci pour votre réponse, alors y a-t-il un moyen d'accéder à la boîte de dialogue et de définir toutes ses propriétés telles que l'emplacement du dossier, le type de fichier, le nom de fichier et le plus important cliquant sur le bouton Enregistrer ..... lorsque la boîte de dialogue est déjà ouverte .. ...?



0
votes

Corrigez-moi si je me trompe, cependant, cela sonne comme si vous essayez éventuellement d'accéder aux commandes sur le formulaire de dialogue lorsque ce n'est pas tout à fait possible.

Ce que je veux dire, c'est, showdialog "maintenir" le fil que le formulaire a été créé et ne retournera pas le contrôle à l'application (ou, votre classe de test) jusqu'à ce que showdialog < / code> a fini de traitement, auquel cas votre code d'utilisateur continuerait sur son chemin.

Essayez d'accéder ou de manipuler les commandes à partir d'un thread séparé (dans ce cas, refacteur de la classe du pilote de test pour frayer un thread séparé pour chaque nouveau formulaire qui doit être affiché et testé).


2 commentaires

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


De plus, si vous disposez de la forme parent, la méthode d'expulsion fonctionnera même avec une forme modale active. Il est possible que vous souhaitiez accéder à la forme modale alors.