[C#] Event vererben

Hallo zusammen,

aktuell arbeite ich an einer Form-Klasse, von der alle Forms erben, und beim Starten die letzte Position aus der Registry lesen und beim Schließen die letzte Postion der Form mit X & Y in die Registry speichern.

Das Holen der Postion klappt auch wunderbar:
Code:
public Forms() 
        {
            // Automatisches Zuweisen eines Icons
            System.Drawing.Icon ico = new System.Drawing.Icon("DD 20.ico");
            this.Icon = ico;

            // Ermittlung der letzten Fensterposition
            try
            {
                this.Location = new System.Drawing.Point(
                        Convert.ToInt16(RegHelper.GetSpecificKey("lastX")),
                        Convert.ToInt16(RegHelper.GetSpecificKey("lastY"))
                );
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
        }

Jedoch benötigt ich das FormClosing-Event um das Schließen der Form abzufangen und meine Position abzuspeichern.
In den Child-Forms kann es jedoch vorkommen, dass ich bereits im Event Dinge durchführe, duie erhalten bleiben sollen.

Nun habe ich in meiner Vaterklasse das Event deklariert:
Code:
protected void Forms_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                RegHelper.SetSpecificKey("lastX", this.Location.X.ToString());
                RegHelper.SetSpecificKey("lastY", this.Location.Y.ToString());
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
            this.Close();
        }

Ich weiß jedoch nicht, wie ich es so anstelle, dass das Event im Child gefeuert wird, alles darin abgearbeitet wird, und dann das Event im Parent feuert.

hat jemand von euch eine Ahnung?
 
Also bei mir funktioniert folgendes.

Parent:
Code:
    [COLOR=#0000ff][B]public[/B][/COLOR] [COLOR=#ff0000]class[/COLOR] CommonForm : Form
    {
        [COLOR=#0000ff][B]public[/B][/COLOR] [COLOR=#191970][B]CommonForm[/B][/COLOR]()
        {
            [B]this[/B].FormClosing += [COLOR=#008b8b][B]new[/B][/COLOR] [COLOR=#191970][B]FormClosingEventHandler[/B][/COLOR](CommonForm_FormClosing);
        }

        [COLOR=#ff0000]void[/COLOR] [COLOR=#191970][B]CommonForm_FormClosing[/B][/COLOR]([COLOR=#ff0000]object[/COLOR] sender, FormClosingEventArgs e)
        {
            MessageBox.[COLOR=#191970][B]Show[/B][/COLOR]([COLOR=#0000ff]"Parent"[/COLOR]);
        }
    }
Child:
Code:
    [COLOR=#0000ff][B]public[/B][/COLOR] [COLOR=#ff0000]class[/COLOR] TestForm : CommonForm
    {
        [COLOR=#0000ff][B]public[/B][/COLOR] [COLOR=#191970][B]TestForm[/B][/COLOR]()
        {
            [B]this[/B].FormClosing += [COLOR=#008b8b][B]new[/B][/COLOR] [COLOR=#191970][B]FormClosingEventHandler[/B][/COLOR](TestForm_FormClosing);
        }

        [COLOR=#ff0000]void[/COLOR] [COLOR=#191970][B]TestForm_FormClosing[/B][/COLOR]([COLOR=#ff0000]object[/COLOR] sender, FormClosingEventArgs e)
        {
            MessageBox.[COLOR=#191970][B]Show[/B][/COLOR]([COLOR=#0000ff]"Child"[/COLOR]);
        }
    }
Erst wird in CommonForm (Parent) das FormClosing aufgerufen und dann in TestForm (Child).
 
Hallo und lieben Dank erst einmal für deine Antwort.
Also ich habe mal testweise in einem Child das Event deklariert:
PHP:
public void frmLogin_FormClosing(object sender, FormClosingEventArgs e)
{
    MessageBox.Show("test");
}

mein Event im Parent sieht so aus:
PHP:
 public void Forms_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                RegHelper.SetSpecificKey("lastX", this.Location.X.ToString());
                RegHelper.SetSpecificKey("lastY", this.Location.Y.ToString());
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
            this.Close();
        }

Jedoch wird es einfach zum Verrecken nicht gefeuert. Hat das eventuell damit zutun, dass ich das Event per Designer vom Visual Studio hinzufüge und nicht programmatisch?
Auch das Event im Child wird komischerweise nicht gefeuert.
 
Zuletzt bearbeitet:
Ich habe das gerade nochmal im Designer getestet, funktioniert auch.
Schau mal in deiner "***.Designer.cs" nach ob dort im InitializeComponents() sowas in der Art steht:

Code:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainFormFormClosing);
Benutzt du Visual Studio oder SharpDevelop?

Edit: Und mache das this.Close(); am Ende der FormClosing() raus, sonst hast du da ne Endlosschleife.
 
Zuletzt bearbeitet:
Hallo und danke für deine schnelle Antwort.
Ja, ich arbeite mit Visual Studio.
Ich muss aber dazu sagen, dass diese Form nicht direkt aufgerufen wird, sondern durch eine übergeordnete Login-Form. In dieser habe ich das FormClosing der Unterform (Main) bekannt gemacht und die komplette Applikation zu schließen.

Hat das eventuell damit etwas zutun, dass das Event nicht feuert?

Edit:
Und ja, die Deklaration des Events war in der Designer drin.
PHP:
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmMain_FormClosed);

Edit 2:
Hat sich komplett erledigt.
Ich hatte in der ParentForm das "InitializeComponents" vergessen, weswegen keine Events abboniert wurden... echt dummer Fehler.
Nun geht's wieder.
Vielen Dank für Eure Hilfen! :)
 
Zuletzt bearbeitet:
Zurück
Oben