Forms öffnen nicht im Vordergrund

03/10/2009 - 22:17 von André Pönisch | Report spam
Hallo allerseits,

ich hab ein merkwürdiges Verhalten von Forms beobachtet (WinForms,
.net2.0), das jetzt schon in zwei verschiedenen Projekten auftritt und von
daher kein Zufall mehr sein kann.

Das Problem stellt sich so dar, dass die Forms sich nicht im Vordergrund
öffnen, sondern hinter anderen (applikationsfremden) Fenstern. Bisher
konnte ich nur durch ein kurzes Aktivieren von TopMost im Shown-Event
erzwingen dass die Fenster am Anfang in den Vordergrund kommen. Wobei aber
wiederum der Fokus verloren geht. BringToFront und Activate haben da leider
nicht geholfen.

Das gemeinsame an den Projekten ist, dass die betroffenen Forms das erste
Fenster in einem neuen STA-Thread sind. Sie werden mit ShowDialog geöffnet
und haben natürlich keine Owner. Weitere Fenster die in dem Thread
gestartet werden, die dann auch einen Owner haben, haben das Problem dann
nicht mehr.

Dieses Vorgehen hat bei den beiden Projekten verschiedene Gründe. Bei dem
einen Projekt sollen mehrere Fenster/Dialog-Reihen unabhàngig voneinander
arbeiten können, ohne sich gegenseitig zu blockieren. Bei dem anderen
Projekt handelt es sich um ein Setup-Projekt, wofür ich eine
benutzerdefinierte Aktion mit einem Konfigurations-Formular hab. Da ich
dort auch einen FolderBrowserDialog benötige war das auskoppeln in einen
eigenen STA-Thread nötig.

Das merkwürdige ist, dass ich das Problem nicht mit einem Minimal-Projekt
nachvollziehen konnte. Dafür hatte ich eine kleine Forms-Anwendung
geschrieben, in der ich per Knopfdruck einen STA-Thread mit eigener Form
starte. Aber dort funktionierte alles wie es sollte.
Bei den Programmen wo das Problem auftritt, tritt es aber zuverlàssig auf.

Hat jemand eine Idee woran es liegen könnte? Müsste ich bei STA-Threads
irgendwas besonderes beachten, damit so etwas nicht auftritt? Oder hat
vielleicht jemand eine Idee wie man das Problem in den Griff bekommen kann
(eventl. durch Aktionen im WndProc)?

Ich bin für jeden Tipp und Vorschlag dankbar.

Grüße
André
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
03/10/2009 - 22:36 | Warnen spam
Hallo André!

André Pönisch schrieb:
ich hab ein merkwürdiges Verhalten von Forms beobachtet (WinForms,
.net2.0), das jetzt schon in zwei verschiedenen Projekten auftritt und von
daher kein Zufall mehr sein kann.

Das Problem stellt sich so dar, dass die Forms sich nicht im Vordergrund
öffnen, sondern hinter anderen (applikationsfremden) Fenstern. Bisher
konnte ich nur durch ein kurzes Aktivieren von TopMost im Shown-Event
erzwingen dass die Fenster am Anfang in den Vordergrund kommen. Wobei aber
wiederum der Fokus verloren geht. BringToFront und Activate haben da leider
nicht geholfen.

Das gemeinsame an den Projekten ist, dass die betroffenen Forms das erste
Fenster in einem neuen STA-Thread sind. Sie werden mit ShowDialog geöffnet
und haben natürlich keine Owner. Weitere Fenster die in dem Thread
gestartet werden, die dann auch einen Owner haben, haben das Problem dann
nicht mehr.

Dieses Vorgehen hat bei den beiden Projekten verschiedene Gründe. Bei dem
einen Projekt sollen mehrere Fenster/Dialog-Reihen unabhàngig voneinander
arbeiten können, ohne sich gegenseitig zu blockieren. Bei dem anderen
Projekt handelt es sich um ein Setup-Projekt, wofür ich eine
benutzerdefinierte Aktion mit einem Konfigurations-Formular hab. Da ich
dort auch einen FolderBrowserDialog benötige war das auskoppeln in einen
eigenen STA-Thread nötig.



Das Hauptformular sollte nicht mittels 'ShowDialog' angezeigt werden,
sondern über 'Show'. Was spricht dagegen, 'Application.Run' zu
verwenden, um das Formular anzuzeigen und die Nachrichtenverarbeitung zu
starten (das Fenster schließt sich dadurch nicht automatisch).

Je nach Umstànden kann auch ein eigener Anwendungskontext sinnvoll sein:

ApplicationContext Class (System.Windows.Forms)
<URL:http://msdn.microsoft.com/en-us/lib...t.aspx>

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen