Laden...

Öffnen eines nicht modelen Fensters von einem modalen Fentser aus: Letzteres schließt sich gleich

Erstellt von Quaneu vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.005 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren
Öffnen eines nicht modelen Fensters von einem modalen Fentser aus: Letzteres schließt sich gleich

Hallo zusammen,

ich habe folgendes Problem und finde nicht die Ursache:

Ich habe ein Fenster A, dieses ist modal. Nun kann man in diesem auf ein TreeItem doppelt klicken und es soll ein neues Fenster B aufgehen. Diese soll nicht modal sein.
Man sieht das Fenster ganz kurz aufgehen und dann schließt es sich wieder (ohne in das Closing Event zu laufen). Wenn B modal angezeigt wird, klappt es.

Ich weiß einfach nicht wo ich den Fehler suchen soll. Nach dem Aufruf von Show() passiert nicht mehr...

Nachtrag:
Anscheinend existiert das Fenster B noch, d.h. es wird nur nicht angezeigt, obwohl Visible == true und WindowState == FormWindowState.Maximized ist.

Schöne Grüße
Quaneu

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Quaneu,

also bei mir geht das problemlos.

using System;
using System.Windows.Forms;

public class MyWindow : Form
{
   bool _modal;

   public MyWindow (bool modal)
   {
      _modal = modal;
      Text = "MyWindow";
      var ctrlCurr = new Button ();
      ctrlCurr.Dock = DockStyle.Fill;
      ctrlCurr.Text = "Open";
      ctrlCurr.Click += OpenClick;
      Controls.Add (ctrlCurr);
   }

   protected void OpenClick (Object sender, EventArgs e)
   {
      Form form = new MyWindow (!_modal);
      if (_modal) {
         form.ShowDialog ();
      } else {
         form.Show ();
      }
   }
}

public static class App
{
   public static void Main ()
   {
      Application.Run (new MyWindow (true));
   }
}

Wenn es bei dir nicht geht, siehe [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden.

BTW: Wie vermutlich vielen Lesern im Forum bekannt, würde ich empfehlen, gar keine modale Fenster zu verwenden, siehe z.B. Warten auf Schließen einer anderen Form [und warum man Dialoge nicht modal machen sollte].

herbivore

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Vielen Dank schon mal für Deine Bemühungen. Ich werde versuchen ein kleines Projekt zu erstellen, soweit es mir möglich ist.

Schöne Grüße
Quaneu

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Ahhhhh... ich hab den Fehler endlich gefunden. Ich habe ein using Block für meinen Controller, der die View hält und steuert. Dies klappt natürlich wunderbar mit ShowDialog(), mit Show() läuft er natürlich weiter und räumt den Controller auf und die View...

Beispiel:


if (Communicator.Instance.TryOpenModule(1))
{
	Window moduleView = new Window();
	using (ModuleController moduleController = new ModuleController(moduleView))
	{
		moduleController.DisplayNonModal();
	}
}

D.h. wenn ich es nun wirklich nicht modal haben will, muss ich ein Event abonnieren, ob das Fenster geschlossen wurde und dann aufräumen? Bzw. ist dies der saubere Weg?

Schöne Grüße
Quaneu

4.221 Beiträge seit 2005
vor 9 Jahren

Modale Forms müssen explizit disposed werden (oder per using).
Nicht modale Forms disposen sich selber wenn diese geschlossen werden.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Noch viel besser. Danke für eure Hilfe 😃