1. Form aus dem Load-Event schließen?

Asterix-Ac

Erfahrenes Mitglied
Hallo Leute,

sitze zur Zeit an einer kniffligen Sache.
Ich habe 3 Forms. Im 1. Form rufe ich die 2. per ShowDialog() auf.
Dort finden im Load-Event einige Prüfungen statt. Unter anderem rufe ich dort auch das 3. Form mit ShowDialog() auf, dass ein Textfeld, einen OK und einen Abbrechen -Button hat. Abbrechen gibt DialogResult.Cancel zurück.

Klickt man dort auf Abbrechen, soll auch die 2. Form geschlossen werden.
Doch in der Load-Event-Methode ist this.Close() wirkungslos.

Wie kann ich das Problem lösen?

Asterix :confused:
 
Hi AsteriX :)

hm...bin zwas kein Pro, aber so wie ich das sehe,
schließt die Methode this.Close() nur die Form, in der sie aufgerufen wird,

was passiert wenn du "this.form2.Close()" (oder wie deine 2. form halt heißt) verwendest?
oder gibt es nicht eine Methode wie CloseDialog?

Habe noch nie mit DialogResults gearbeitet, ich würds so machen:
Code:
...
// EventHandler, falls man auf den abbrechen Button klickt:
this->buttonAbbrechen->Click += gcnew System::EventHandler(this, &MyClass::buttonAbbrechen_Click);
...

// Funktion, wenn Button_Click
private: System::Void buttonAbbrechen_Click(MyClass::Object^ sender, System::EventArgs^ e)
{
	this->Form2->Close();
	this->Close();
}

Tut mir leid, ist leider VC++ .NET Code :( aber was anderes kann ich nicht (und nicht einmal das gut...)
 
Einfach nach dem ShowDialog in Form2 noch ne abfrage, ob das result von Form3 cancel is und wenn ja einfach die Cancel-Funktion von form2 aufrufen.

edit: Das dritte Form kannste auch durch ne Inputbox ersetzen ;)
 
Einfach nach dem ShowDialog in Form2 noch ne abfrage, ob das result von Form3 cancel is und wenn ja einfach die Cancel-Funktion von form2 aufrufen.
Also die Abfrage mache ich.
Meinst Du die Threading-Cancel-Funktion? Da ich kein Threading einsetze komme ich auch nicht an diese Funktion.

Ich sollte noch dazuschreiben, dass ich VS2002 benutze und dem zu Folge auch Framework 1.0, falls das Unterschiede macht.

Asterix :confused:
 
Nein, nix mit threading. In der Form2-klasse gibt es ja bestimmt eine funktion, die als ereignissprozedur aufgerufen wird, wenn du dort bereits auf abbrechen geklickt hättest. einfach diese Funktion manuell aufrufen;)
 
Event vom Schließen-Button...

Also was ich ja schon mache, aber keine Wirkung hat, ich rufe die Schließen-Button-Methode auf, wenn aus dem 3. Form Cancel zurückkommt.

Das alles nutzt mir aber nichts. Ich müsste eigentlich das Event vom Schließen-Button aufrufen. Aber ich bin zu lange aus der Materie raus. Weißt Du wie das geht? Oder noch eine bessere Lösung?

eine weitere Lösung habe ich zufällig beim Googlen gesehen, doch leider funktioniert er nicht so, wie ich mir das vorstelle (Folgenden Code in Form2 packen):

Code:
public new DialogResult ShowDialog(IWin32Window owner)
{
                if (.......)
        {
                return base.ShowDialog(owner); //the condition is true, so we show the dialog
        }
        else
        {
                return System.Windows.Forms.DialogResult.Cancel;  //return without showing the dialog
        }

}
Aufruf mit (in Form1) :
Code:
myForm.ShowDialog(this)

Und die Funktion:
Ich überschreibe die ShowDialog-Methode in Form2 und erwarte als Parameter das Herkunftsfenster.
der 1. Codeblock in Form2 hat eine if-Abfrage. Ist diese true, wird zum Herkunftsfenster der owner zurückgesendet und damit das Form2 eingeblendet.
Ist die if-Abfrage false, wird der DialogResult.Cancel zurückgegeben, OHNE das Form jemals eingeblendet zu haben.
Doch das möchte ich ja nicht.

Wie kann man die Methode umbauen oder Teile daraus nehmen, um mein 2. Form im Load-Event zu schließen?

Asterix :confused:
 

Neue Beiträge

Zurück