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();
}
....
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
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
Hallo gandalff90,
zum Thema MessageBoxen siehe Warten auf Schließen einer anderen Form [und warum man Dialoge nicht modal machen sollte].
herbivore
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
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"