Ich habe eine WinForm-App, die andere untergeordnete Formulare hat (nicht mdi). Wenn der Benutzer "Esc" drückt, sollte das oberste Formular geschlossen werden, auch wenn es nicht den Fokus hat.
Ich kann einen Tastatur-Hook verwenden, um das Escape global abzufangen, aber ich brauche auch das Handle des Formulars, das geschlossen werden soll.
Ich denke, es gibt eine Möglichkeit, dies mithilfe der Win32-API zu tun, aber gibt es eine Lösung, die verwalteten Code verwendet?
Ich weiß, dass dies ein 4 Jahre alter Thread ist, aber ich hatte ein ähnliches Problem und habe gerade eine alternative Lösung gefunden, falls irgendjemand sonst bei dieser Frage stolpert und nicht mit Win32-Anrufen herumhantieren möchte.
Ich nehme an, dass die oberste Form diejenige ist, die zuletzt aktiviert wurde. Sie können also eine separate Sammlung von Formularen beibehalten, die Application.OpenForms ähnlich ist, mit der Ausnahme, dass diese Auflistung nach dem Zeitpunkt der letzten Aktivierung sortiert wird. Wenn ein Formular aktiviert ist, verschieben Sie es zum ersten Element der Sammlung. Wenn Sie die ESC-Taste sehen, würden Sie die Sammlung [0] schließen und sie entfernen.
FormCollection wird vom Anwendungsobjekt verwendet, um die derzeit geöffneten Formulare in einer Anwendung über die OpenForms-Eigenschaft aufzulisten
Siehe Ссылка
Dann könnten Sie die TopMost () Eigenschaft jedes Formulars überprüfen. Und wenn Sie ein oberstes Formular finden, schließen Sie es.