Laden...

Moduslose Dialoge: Trotz Form.Show ist der Dialog immer vor dem Fenster und wird mitminimiert

Erstellt von bernardo vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.466 Views
B
bernardo Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren
Moduslose Dialoge: Trotz Form.Show ist der Dialog immer vor dem Fenster und wird mitminimiert

Ich möchte verschiedene Forms (Dialoge) modeless anzeigen. Dazu verwende ich die Methode Form.Show() - Funtioniert leider nicht, bleibt modal.

M
198 Beiträge seit 2010
vor 11 Jahren

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

I
57 Beiträge seit 2011
vor 11 Jahren
B
bernardo Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren

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.

B
357 Beiträge seit 2010
vor 11 Jahren

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.

2.891 Beiträge seit 2004
vor 11 Jahren

Rufst du einfach nur Show() ohne Parameter auf oder übergibst du noch den Owner?

49.485 Beiträge seit 2005
vor 11 Jahren

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

B
bernardo Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren

Danke für die Hilfe! Ein Aufruf mit form.Show(this) macht das gewünschte.