Problem beim Vererben von Events in C++
-
Hallo alle zusammen,
Also ich stell hier einfach mal mein Problem in den Raum.
Ich habe eine Basisklasse (erbt von UserControl), die von einer weiteren geerbt wird!
Das Problem besteht darin, das ich ein DragEnter Event besitzte das ich in der Basisklasse Deklariert und Implementiert habe, und es in der spezialisierten Klasse verwende.
Das geht ja schön und es lässt sich auch gut Compilieren ohne Fehler! Aber mit mehrer Warnungen. Die haben zur folge das ich den Form Designer nicht mehr öffnen kann!Error:
The method "SteuerElement_DragDrop" cannot be the method for an event because a class this class derives from already defines the method.Wie kann ich den Fehler beheben! Ich benötige das DragEnter Event in der Basisklasse um Redundanzen im Code zu vermeiden!
Hat jemand einen Vorschlag??
MfG
CTom
-
Zeig mal Code, ich kann das nicht nachvollziehen (verstehe aber auch Dein Text vllt. falsch.)
namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void OnClick(EventArgs e) { base.OnClick(e); } } }
namespace WindowsFormsApplication2 { public partial class Form2 : Form1 { public Form2() { InitializeComponent(); this.Click += new EventHandler(Form2_Click); } void Form2_Click(object sender, EventArgs e) { throw new NotImplementedException(); } protected override void OnClick(EventArgs e) { base.OnClick(e); } } }
-
Jetzt muss ich mal fragen was du hier machst, denn das versteh ich jetzt nicht ganz!
namespace WindowsFormsApplication2 { public partial class Form2 : Form1 { public Form2() { InitializeComponent(); this.Click += new EventHandler(Form2_Click); } void Form2_Click(object sender, EventArgs e) { throw new NotImplementedException(); } protected override void OnClick(EventArgs e) { base.OnClick(e); } } }
Du erbst die Methode OnClick von Form1 und fügst die Methode Form2_Click als Eventhandler hinzu! Warum?? Musst du nicht OnClick hinzufügen, oder versteh ich da jetzt was falsch?
-
Form2.OnClick wird, weil es eine virtuelle Methode ist, statt Form.OnClick vom System aufgerufen. Form2.OnClick delegiert aber die Arbeit zunächst an Form1.OnClick, dieses an System.Windows.Forms.Form.OnClick, und diese Methode ruft alle beim Click-Ereignis registrierten Handler auf.
1. Benutzer: klickt Objekt 2. System: Ruft <Fenster>.OnClick auf 3. Runtime: Findet Form2.OnClick als virtuelle Überladung von <Fenster>.OnClick 4. Runtime: Ruft Form2.OnClick auf 5. Form2.OnClick: Ruft Form1.OnClick auf 6. Form1.OnClick: Ruft System.Windows.Forms.Form.OnClick auf 7. System.Windows.Forms.Form.OnClick: Ruft Click-Eventhandler auf
-
Danke für die schnelle Antwort! ^^ Habs verstanden!
Thx
CTom
-
Zu Überladen und im gleichen Objekt den Delegaten zu Abonieren ist Sinnfrei, sollte nur Zeigen, das ich das eine als auch das andere versucht hab.
Ist Dein Problem gelöst oder hast Du es noch ?