Entwickler-Ecke

WinForms - Formular im Vordergrund der aufrufenden Form (nicht TopMost)


MarcinD - Fr 21.01.11 23:05
Titel: Formular im Vordergrund der aufrufenden Form (nicht TopMost)
Hallo,

ich habe ein Problem mit der Steuerung meiner Formulare. Ich habe ein MainForm, in dem eine DataGridView angezeigt wird. Dort ist eine Symbolleiste, wo man hinzufügen und Bearbeiten kann. Nach dem Klicken der Schaltflächen öffne ich ein Formular mit

C#-Quelltext
1:
myForm.ShowDialog();                    


Das Programm wartet dann, bis das aufgerufene Formular geschlossen wird, weil der DialogResult entscheidet, ob die MainForm und das DataGridView aktualisiert werden soll.

Nun habe ich aber das Problem, dass wenn dieses aufgerufene Formular aktiv ist, es immer vorne ist. d.h. wenn ich Outlook aufmache, dann habe ich dieses Formular vorne. Wie kann ich es einstellen, dass es nur vor dem Mainform ist d.h. Mainform kann nicht bearbeitet werden, aber andere Programme wie z.B. Outlook können davor komplett gesehen und bearbeiten werden.

Wie kann ich das Lösen? Entweder das MyForm ist nicht ganz vorne, oder gibt es einen anderen Weg, wie mein MainForm erfährt, dass MyForm korrekt beendet wurde bzw. abgebrochen wurde.

Danke und Gruß

Martin


MarcinD - Fr 21.01.11 23:46

Super. Man sollte nicht immer alles glauben, was man liest. Es liegt tatsächlich an der TopMost Eigenschaft. Aber ich verstehe nicht, wieso die bei mir true war. In der Msdn Library steht folgendes:
Zitat:

Eigenschaftenwert

true , um das Formular als oberstes Formular anzuzeigen, andernfalls false . Der Standardwert ist false .

Ich bin davon ausgegangen, dass das bei mir auch der Fall ist. Deshalb war ich auch der Meinung, dass TopMost mir bei meinem Problem nicht helfen kann. Habe auch das komplette Projekt durchsucht. Nirgendwo wird TopMost auf True gesetzt. Komisch.


jaenicke - Sa 22.01.11 06:35

Auch nicht direkt in den Eigenschaften des Formulars? Bei mir ist es jedenfalls false, wenn ich es nicht ändere. :nixweiss:


Th69 - Sa 22.01.11 10:18

Hallo,

es hat jetzt nicht direkt etwas mit deinem Problem zu tun, aber du solltest möglichst immer selber den Owner des Dialogs setzen, d.h.

C#-Quelltext
1:
myForm.ShowDialog(this);                    

wobei 'this' dann die aufrufende Form ist.

(ohne diese Angabe wird immer das derzeit aktive Fenster als Owner genommen, und dabei kann es - je nach Aufruf - zu komischen Effekten kommen, insbesondere wenn andere Fenster im Spiel sind...)