[C#] Bei jeder Form Prüfung der Startposition

Spyke

Premium-User
Überschreibe OnLoad Methode der Form zum laden der koords. und OnFormClosed (oder OnFormClosing) zum speichern, brauchste nixs events, wenn de eh ableitest.
 

real-insanity

Erfahrenes Mitglied
Also ich hab jetzt folgendes in meiner Vaterklasse implementiert:
C#:
 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());
            }
        }

Dabei ist mir aufgefallen, dass dieses Event nicht aufgerufen wird. Der läuft brav in den Konstruktor rein und will die holen, aber beim Speichern schreibt er sie nicht.

Was mach ich denn hier falsch?
 
Zuletzt bearbeitet:

Spyke

Premium-User
Spring er in die Methode rein wenn du Breakpoint setzt und das Form schließt?

Ansonsten hoffe ich mal das du das Form nicht selbst mit Dispose schließt, denn da werden die Ereignisse nicht geschmissen.
 

Spyke

Premium-User
Der destructor ist da fehl am Platz.

Hast du diese Methode überhaupt einem Ereignis zugeordnet?
Wird das Formular ordnungsgemäß mit Close geschlossen?

Und wie gesagt ich würde eher die OnFormClosing Methode überschreiben.
Da du dich im gleichen Objekt bewegst musst du nicht unbedingt für dich selbst dein eigenes Ereignis abonnieren.

Code:
protected override void OnFormClosing(FormClosingEventArgs e)
{
   base.OnFormClosing(e);

   if (!e.Cancel)
   {
         //Speicher zeugs
   }
}
 

real-insanity

Erfahrenes Mitglied
Also muss ich das in der Vaterklasse implementieren? Sorry, hab noch nicht viel mit Vererbung und so gemacht.
 
Zuletzt bearbeitet:

real-insanity

Erfahrenes Mitglied
Also vermutlich check ich das einfach nicht. Ich hab nun in meiner Vaterklasse das Event wie folgt deklariert:

C#:
protected virtual 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());
            }
        }

In meiner Kindklasse habe das gemacht:
C#:
protected override void frmLogin_FormClosing(object sender, FormClosingEventArgs e)
        {
            
        }

hierbei sagt er Compiler mir dann immer:
Error 2 'xyz.forms.frmLogin.frmLogin_FormClosing(object, System.Windows.Forms.FormClosingEventArgs)': no suitable method found to override E:\xyz\xyz\xyz\xyz\frmLogin.cs 155 33 xyz

Hab auch das in http://msdn.microsoft.com/en-us/library/hy3sefw3(v=vs.80).aspx ausprobiert, aber auch das will nicht so recht funktionieren.
Auch habe ich schon http://www.akadia.com/services/dotnet_inherited_forms.html durch, aber ich glaub ich versteh das alles nicht so ganz.

was mach ich falsch?
 
Zuletzt bearbeitet:

real-insanity

Erfahrenes Mitglied
Hat sich nun geklärt. Ich hatte im Vater vergessen zu sagen InitializeComponent(). Somit wurden die Events gar nicht erst deklariert und wurden dementsprechend nicht gefeuert.