Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[C#] Event vererben

Diskussion: [C#] Event vererben im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo zusammen, aktuell arbeite ich an einer Form-Klasse, von der alle Forms erben, und beim Starten die letzte Position ...

Antwort
Alt 21.12.11, 11:15   #1 (permalink)
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard [C#] Event vererben

Anzeige

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?
reaLInsanity ist offline   Mit Zitat antworten
Alt 21.12.11, 20:45   #2 (permalink)
Member of Honour
 
Registriert seit: 01.02.02
AaFreak Leistung: Facit NTK
AaFreak eine Nachricht über ICQ schicken
Likes: 0
Standard

Also bei mir funktioniert folgendes.

Parent:
Code:
 public class CommonForm : Form
    {
        public CommonForm()
        {
            this.FormClosing += new FormClosingEventHandler(CommonForm_FormClosing);
        }

        void CommonForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            MessageBox.Show("Parent");
        }
    }
Child:
Code:
 public class TestForm : CommonForm
    {
        public TestForm()
        {
            this.FormClosing += new FormClosingEventHandler(TestForm_FormClosing);
        }

        void TestForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            MessageBox.Show("Child");
        }
    }
Erst wird in CommonForm (Parent) das FormClosing aufgerufen und dann in TestForm (Child).
AaFreak ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 21.12.11, 22:51   #3 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Hallo und lieben Dank erst einmal für deine Antwort.
Also ich habe mal testweise in einem Child das Event deklariert:
PHP-Code:
public void frmLogin_FormClosing(object senderFormClosingEventArgs e)
{
    
MessageBox.Show("test");

mein Event im Parent sieht so aus:
PHP-Code:
 public void Forms_FormClosing(object senderFormClosingEventArgs 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.

Geändert von reaLInsanity (21.12.11 um 23:01 Uhr)
reaLInsanity ist offline   Mit Zitat antworten
Alt 22.12.11, 19:33   #4 (permalink)
Member of Honour
 
Registriert seit: 01.02.02
AaFreak Leistung: Facit NTK
AaFreak eine Nachricht über ICQ schicken
Likes: 0
Standard

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.

Geändert von AaFreak (22.12.11 um 19:37 Uhr)
AaFreak ist offline   Mit Zitat antworten
Alt 23.12.11, 12:57   #5 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

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-Code:
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!

Geändert von reaLInsanity (23.12.11 um 13:24 Uhr)
reaLInsanity ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [C#] Event vererben
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Event Buchung PHP Skript mastermix252 (Web-) Design und webbasierte Sprachen 7 28.02.10 16:17
Linux/C++: /dev/input/event* lesen Extinction Code Kitchen 4 07.12.09 19:04
C#: Event nur einmal definieren? :::Lük::: Code Kitchen 2 21.05.08 20:36
Event Viewer nAppEr Windows 0 12.02.04 09:23
Event-Suchmaschine Flou News & Ankündigungen 0 27.04.02 11:15


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61