Wie bekomme ich das Handle des obersten Formulars in einer WinForm-App?

8

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?

    
tzup 16.06.2009, 11:17
quelle

5 Antworten

7

Hier ist eine Möglichkeit, das oberste Formular zu erhalten, das Win32 verwendet (nicht sehr elegant, aber es funktioniert):

%Vor%     
tzup 17.06.2009, 08:34
quelle
3

Wie wäre es mit Application.Openforms

%Vor%     
Simon 13.02.2012 23:40
quelle
2

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.

    
fred 07.06.2013 23:22
quelle
1

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.

    
Bogdan_Ch 16.06.2009 13:04
quelle
1

Sie könnten ein Singleton-ähnliches Muster in Ihrer obersten Form implementieren und eine statische Eigenschaft bereitstellen, die die eine Instanz von sich selbst zurückgibt und sie einfach schließt.

%Vor%     
NascarEd 16.06.2009 15:04
quelle

Tags und Links