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?
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
:
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.
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).