Ich möchte verschiedene Forms (Dialoge) modeless anzeigen. Dazu verwende ich die Methode Form.Show() - Funtioniert leider nicht, bleibt modal.
Verstehe ich nicht?
Wenn man ein normale WinForm ohne
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
usw. beendet, ist es dann nicht modeless?
Die Events in diesem Form kann man ja zum aufrufenden Form senden!
Mike
hilft dir das hier vielleicht schon ?
[Snippet] Nicht-modale Abfrage als Alternative für MessageBoxen
Danke für die Antworten. Ich habe lange Erfahrung mit der WinApi und C oder C++. Dort lege ich für ein Dialogfenster einmal fest, ob es modal oder modeless sein soll und fertig. Windows macht das dann wie gewünscht selbst. C# und .Net verhalten sich da erstaunlicherweise vollständig anders. Z.B. verschwindet eine mit Show() bereits angezeigte Form sang und klanglos in der Taskleiste, wenn man die Parentform maximiert oder minimiert. Das sollte nicht sein und keinen zusätzlichen Aufwand erfordern, um das zu verhindern.
Natürlich verschwindet eine Form, die mit Show() und nicht mit ShowModal() angezeigt wurde, wieder in der Taskleiste, wenn die Parentform plötzlich wieder aktiviert wird. Ich wüsste nicht, wie sie sich sonst verhalten sollte. Ich frage mich daher, ob wir hier von demselben Begriff "Modaler Dialog" reden. Ein modaler Dialog erscheint und erfordert eine Interaktion, bevor mit dem Parentelement überhaupt wieder interagiert werden kann. Ein nichtmodaler Dialog kann angezeigt werden, aber währenddessen kann problemlos mit anderen Fenstern interagiert werden. Wenn du daher sagst, dass eine Form wieder verschwindet, nachdem sie mit Show angezeigt wurde und dann das Parentform maximiert wird, dann ist das völlig normal. Wird es mit ShowModal aufgerufen, ist das nicht mehr möglich. Ist aber das verhalten erwünscht, dass auch mit dem Parentform interagiert werden kann, der Dialog aber trotzdem im Vordergrund bleiben soll, dann solltest du dir evtl. TopMost oder ähnliches anschauen, um dieses Verhalten zu erreichen. Eine Diskussion darüber, ob das so sein sollte und ob es dafür zusätzlichen Aufwand brauchen sollte, ist absolut nicht zielführend und völlig irrelevant, da sich das nicht ändern wird.
Rufst du einfach nur Show() ohne Parameter auf oder übergibst du noch den Owner?
Hallo bernardo,
anscheinend verwechselst du modal (also dass eine Bedienung des Forms, das den Dialog ausgelöst hat, automatisch verhindert wird, solange der Dialog offen ist) mit der Onwer-Owned-Beziehung (die dazu führt, dass das Owned-Fenster sich immer vor dem Owner befindet und das Minimieren des Owners automatisch auch das Owned-Fenster minimiert). Normale modale Dialoge haben automatisch auch eine Owned-Beziehung zu dem auslösenden Fenster, aber andersherum gibt es keinen solchen Automatismus.
Entsprechend wird wohl die Vermutung von dN!3L stimmen und sein Lösungsvorschlag helfen.
herbivore
Danke für die Hilfe! Ein Aufruf mit form.Show(this) macht das gewünschte.