Auch nicht schön: WindowsFormsParkingWindow


Thomas Wölfer
Thomas Wölfer

01. August 2004


Ist mir vorhin im Visual Studio 2003 'aufgefallen' - nachdem ich ungefähr eine Stunde lang auf meiner Seite nach einem Fehler gesucht habe: Man kann einen Fall erzeugen, bei dem der Wechsel aus der eigenen Anwendung und wieder zurück (per Alt-Tab) dazu führt das die eigenen Anwendung sofort einfriert.

Wer auch so ein Problem hat, der schaut besser einmal kurz in die Taskliste und sucht nach einem WindowsFormsParkingWindow:

Dazu gehört ein unsichtbares Fenster, das man natürlich auch sichtbar machen kann (Spy++ ist dabei das Tool der Wahl). Sichtbar sieht das Ding (beim mir) wie folgt aus:

Und warum bringt das Ding nun die eigene Anwendung zum einfrieren? So ganz im klaren bin ich mir nicht - ich denke aber folgendes erklärt die Sache eingermassen:

Wenn man ein Kontroll-Element von einer Form entfernt, dann wird dieses Control eben im WindowsFormsParkingWindow untergebracht. Sinn der Sache ist wohl, das man das Control dadurch hinterher wieder einfach relativ leicht wiederverwenden kann - falls man es nämlich wieder auf einer Form einfügt.

Das Problem: Wenn das Control Focus hat während es auf die andere Form transferiert wird, dann verbleibt der Focus bei diesem Control. Dummerweise ist die neue 'Parent' Form eben das WindowsFormsParkingWindow - und das ist unsichtbar. Es gibt also keine Events mehr: Die Anwendung ist dann tot.

Lösung: Vor dem entfernen des Controls den Focus auf ein anderes Control - zum Beispiel das Parent des Controls - setzen.

Es wäre natürlich schön gewesen, wenn man bei Microsoft irgendwas zum Thema hätte finden können. Man bekommt aber das hier.