Event aus einem FormClosingEvent aufrufen

Hi,
ich möchte gerne aus einem FormClosingEvent ein „normales“ Event aufrufen. Das mag zwar eine total blöde Frage sein, aber irgendwie finde ich dazu nichts.
Ich hab halt sowas:

 private void Schliessend(object sender, EventArgs e)
 {
 MessageBox.Show("Formclosing"); // letzte Anweisungen
 this.Close(); // Und Schluss
 }
 private void OnClosing(object sender, FormClosingEventArgs e)
 {
 // Hier müsste irgendwas stehen was "Schliessend" aufruft
 } 

Was ich damit erreichen will ist: Sowohl beim Fenster schließen als auch bei der Menüauswahl „Programm schliessen“ soll dasselbe Ereignis angestossen werden. Und da ich Schliessend dem Schliessen-Kreuz oben in der Ecke nicht schmackhaft machen kann, dachte ich, helfe ich mir so. Am einfachsten wäre es natürlich, wenn auch das schließen des Fensters mit dem Kreuz Schliessend auslöst.

Danke und sorry für die (wahrscheinlich) blöde Frage
Mathias

Hallo Mathias,

was du möchtest geht zwar, aber ich machs leiber anders:

private void Schliessend(object sender, EventArgs e)
{
schlussmachen();
this.Close(); // Und Schluss
}
private void OnClosing(object sender, FormClosingEventArgs e)
{
schlussmachen();
}
Private void schlussmachen()
{
MessageBox.Show(„Formclosing“); // letzte
//und ganz viel mehr …
}

finde ich übersichtlicher.

aber probier mal:
this.InvokeOnClick(this, e);
wobei thsi halt die Form repräsentiert.

Wie das nun genau geht kann ich nicht sagen, aber vieleicht kannst du es posten, wenns klappt …

mfg

Dirk.Pegasus

Hi Dirk,

danke erstmal für die Mühe. Also die erste Variante funktioniert, allerdings mit der Einschränkung dass dann natürlich beim Schliessen mit Knopf (nicht mit Kreuz) die Schlussmethode zweimal aufgerufen wird (durch this.Close). Verhindern tue ich das im Moment durch ein bool, welches der schlussmachen signalisiert, ob es auch selber this.Close(); auslösen soll oder nicht. Nicht elegant aber funktioniert.

InvokeOnClick krieg ich leider irgendwie nicht zum laufen.
Jetzt noch das letzte Problem: Wenn das Programm sich dann schon im Closing-Prozess befindet (also OnClosing schon an ist), kann man das noch irgendwie davon abhalten? Ich möchte halt am Schluss eine Abfrage im Sinne von: Speichern? Ja/Nein/Abbrechen, wobei Abbrechen dann das Programm weiterlaufen lässt.

Danke

Mit freundlichen Grüßen
Mathias

Hat sich erledigt…
Sorry
Nachdem ich mal die Onlinehilfe ein bisschen geärgert habe, hat sich folgende Variante als vernünftigste erwiesen:

 private void Schliessend(object sender, EventArgs e)
 { 
 this.Close();
 }
 private void OnClosing(object sender, FormClosingEventArgs e)
 {
 if (MessageBox.Show("Ohne speichern Verlassen?", "Beenden...",
 MessageBoxButtons.YesNo) == DialogResult.No)
 {
 // Schliessen abbrechen
 e.Cancel = true;
 // Methoden...
 }
 }

Man kann OnClosing bestimmt auch irgendwie eleganter aufrufen als so. Aber das war genau das was ich gesucht habe.

Danke nochmal
Mathias

Hi!

Nö, das scheint die sinnvollste Möglichkeit zu sein. Du willst ja immer nachfragen, wenn der Dialog geschlossen wird, egal wodurch das Schließen ausgelöst wird.
Dass das ‚X‘ das Schließen auslöst, ist klar (ist ja windowsweit das einzige Verhalten des ‚X‘).
Wenn über irgendeinen anderen Button oder Menüpunkt deiner Anwendung ebenfalls der Dialog geschlossen werden soll, dann machst Du das dort einfach (wie oben sehr richtig: this.Close() aufrufen). Der Dialog wird geschlossen, dabei der EventHandler OnClosing aufgerufen und gut.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]