Wie kann ich den Verweis auf das aktuell aktive modale Formular erhalten?

7

Ich schreibe eine kleine Klasse, um Integrationstests einer WinForm-Anwendung zu testen. Die Testtreiberklasse hat Zugriff auf das Hauptformular und sucht das Steuerelement, das anhand des Namens verwendet werden muss, und verwendet es, um den Test zu steuern. Um das Steuerelement zu finden, durchquere ich die Control.Controls-Struktur. Ich stehe jedoch fest, wenn ich in einem Dialogfenster auf Steuerelemente zugreifen möchte (ein benutzerdefiniertes Formular, das als Dialogfeld angezeigt wird). Wie kann ich es bekommen?

    
Grzenio 14.07.2009, 17:26
quelle

3 Antworten

21

Sie können einen Verweis auf das derzeit aktive Formular abrufen, indem Sie das statische Form.ActiveForm Eigenschaft.

Bearbeiten: Wenn Form nicht den Fokus hat, gibt Form.ActiveForm null zurück.
Eine Möglichkeit, dies zu umgehen, ist die Verwendung der Sammlung Application.OpenForms und das Abrufen des Elements last , das das aktive Form ist, wenn es mit ShowDialog :

angezeigt wird %Vor%     
Julien Poulin 14.07.2009, 18:58
quelle
0

Ich bin mir nicht sicher, ob Sie auf Steuerelemente in einem vordefinierten Dialogfeld zugreifen können. sie scheinen alle zusammen verpackt. Vielleicht haben Sie mehr Glück, wenn Sie ein eigenes Dialogfeld erstellen, das genau das tut, was Sie möchten. Dann können Sie auf die .Controls innerhalb davon zugreifen.

    
Jon Onstott 14.07.2009 17:29
quelle
0

Korrigieren Sie mich, wenn ich falsch liege, es klingt jedoch so, als ob Sie möglicherweise versuchen, auf die Steuerelemente des Dialogformulars zuzugreifen, wenn es nicht möglich ist.

Was ich meine ist, dass ShowDialog den Thread, auf dem das Formular erstellt wurde, "aufhält" und die Kontrolle nicht an die Anwendung (oder Ihre Testklasse) zurückgibt, bis ShowDialog die Verarbeitung beendet hat. In diesem Fall Ihr Benutzercode würde auf seinem Pfad fortfahren.

Versuchen Sie, auf die Steuerelemente zuzugreifen oder sie aus einem separaten Thread zu bearbeiten (in diesem Fall sollten Sie die Testtreiberklasse neu gestalten, um für jedes neue Formular, das angezeigt und getestet werden muss, einen separaten Thread zu erzeugen).

    
Mike J 14.07.2009 19:50
quelle

Tags und Links