Laden...

Form soll bei Fehler gleich wieder geschlossen werden

Erstellt von gandalff90 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.230 Views
G
gandalff90 Themenstarter:in
35 Beiträge seit 2010
vor 12 Jahren
Form soll bei Fehler gleich wieder geschlossen werden

Hallo Leute,

Meine Main Form ist ein Mdi Container. Bei Klick auf einem Button wird eine neue Form als Child geöffnet und beim Load-Event einige Daten überprüft.
Stimmen diese Daten nicht so wird eine Messagebox angezeigt danach will ich diese Form mit Close() wieder schließen. Jedoch wird die Form in einigen Fällen troztdem weiter ausgeführt.
Was mache ich falsch??


private void Form2_Load(object sender, EventArgs e)
        {
            if (!GlobalData.Check())
            {
                MessageBox.Show("Fehler");
                this.Close();
            }

....

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo gandalff90,

bevor das Form komplett erzeugt und angezeigt ist, kann es sein, dass man es noch nicht (mit Close) schließen kann. Im Konstruktor sollte man mit einer Exception verhindern können, dass das Form (fertig) erzeugt wird. Ansonsten muss man warten, bis es fertig erzeugt wurde, und es erst dann schließen. Ich würde tippen, dass man ab Form.Shown das Form mit Close schließen kann. Oder du überprüfst alles schon vorher und erzeugst das Form gar nicht erst.

herbivore

G
gandalff90 Themenstarter:in
35 Beiträge seit 2010
vor 12 Jahren

Danke,

Mit dem Event Shown kann ich die Form dann schließen.
Kleiner Schönheitsfehler: die Form wird hinter der Messagebox angezeigt bis man OK klickt, damit kann ma aber leben.

Änderung:
Habe es jetzt mit der Exception probiert und es funktioniert besser


private void Form2_Load(object sender, EventArgs e)
        {
            if (!GlobalData.Check())
            {
                MessageBox.Show("Fehler");
                throw new Exception();
            }
....

Die Funktion welche diese Form öffnet muss dann mit try und catch versehen werden.

VG gandalff

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo gandalff90,

zum Thema MessageBoxen siehe Warten auf Schließen einer anderen Form [und warum man Dialoge nicht modal machen sollte].

herbivore

F
84 Beiträge seit 2008
vor 12 Jahren

Hallo,

ich persönlich würde bevorzugen die Instanz erst garnicht zu erzeugen / anzuzeigen wenn die Prüfung fehlschlägt. Besteht diese Möglichkeit in dem Fall?
Zum einen würde sich das Ausgangsproblem eleminieren und zum anderen werden keine Ressourcen verbraucht.

Grüße,
fod

P
660 Beiträge seit 2008
vor 12 Jahren

Falls es dir nicht möglich sein sollte die Daten vor der Erstellung zu überprüfen so kannst du auch folgendes machen


public class Form1 : Form
{
   public void MyMethodToCallForm2()
   {
      try
      {
         Form2 MyForm2 = new Form2(MyParams);
         MyForm2.Show();
      }
      catch(Exception ex)
      {
         //Anzeige der Fehlermeldung
      }
   }
}

public class Form2 : Form
{
   public Form2(object Params)
   {
      if(!GlobalData.Check())
      {
         throw new Exception("Die Überprüfung der Daten war nicht erfolgreich");
      }
   }
}

Auf diese weise würde dem User keine Exception nach der Messagebox um die Ohren fliegen

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"