MouseOver Event in abgeleiteter Klasse verwenden?
-
Hallo, hab da ein kleines Problem mit einer PictureBox.
Ich habe eine neue Klasse erstellt welche von PictureBox abgeleitet ist.
In einer Form erstelle ich nun während der Laufzeit dynamisch Objekte von dieser Klasse.Wo ich jetzt aber nicht durchblicke ist, wie kann ich in meinem Form, wo die objects
dynamisch erzeugt werden das OnMouseOver event abfangen bzw. wass muss ich in meiner
abgeleiteten Klasse dafür überschreiben. Ich glaub es hat was mit den overide bzw
delegates zu tun, blick da aber nicht durch. Und wie kann ich feststellen welches object
das event ausgelöst hat (object.name ?).mfg
ev
-
ich machs meistens so das ich im visual studio schreibe
"override"
dann gibts schon die intellisense listeund dann schau ich obs was passendes bei den "On***" gibt
zb OnPreviewMouseOver oder OnPreviewMouseEnter usw
schau einfach mal durch
-
Hallo Mr Evil,
Danke für die rasche Antwort!, hab das mit dem overide jetzt so gemacht wie Du gesagt
hast. Jezt muss ich aber ja einen eventhandler in meine Form einfügen, wie kann ich das manuell also von hand machen ?Hab ihn meiner abgeleiteten Klasse jetzt folgendes eingefügt:
protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); }
Jetzt muss ich aber ja noch einen eventhändler einfügen, bei normalen buttons mach ich das immer so:
this.button1.Click += new System.EventHandler(this.button1_Click);
und die dazugehörende Funktion:
private void button1_Click(object sender, System.EventArgs e) { ... }
Wo bzw wie muss ich das mit meiner dynamisch erstellten pictureBox machen, dort wo ich sie erzeuge ?
mfg
ev
-
mach das gleiche nochmal mit dem Event
-
So habe es jetzt mit einem anderen Event proviert. Mit MouseMove gehts.
Lege jetzt den Eventhandler in der gleichen funktion an , wo ich auch das object erzeuge.
for (int i = 0; i < iCards; i++, j = j+30) { pb = new Cards(); strTemp = "Card"; strTemp += i.ToString(); pb.Name = strTemp; pb.Height = 144; pb.Width = 100; pb.Top = 340; pb.Left = 300+j; pb.SendToBack(); pb.SizeMode = PictureBoxSizeMode.StretchImage; pb.Image = Image.FromFile(@"c:\Projects\Uno\Uno\Pic\Dek\K2G.jpg"); pb.MouseMove += new MouseEventHandler(cards_MouseEnter); this.Controls.Add(pb); }
Das Funktioniert nun auch, aber wenn ich das MouseEnter event abfragen möchte bekomm ich folgenden Fehlermeldung beim anlegen des EventHandlers.
Fehler 1 Keine Überladung für "pb_MouseEnter" stimmt mit dem Delegaten "System.EventHandler" überein.
Der event handler wird so angelegt: pb.MouseEnter += new EventHandler(pb_MouseEnter);
Was mach ich den falsch ?
-
vermutlich die passende methode dazu, welche übergabeparameter hast du in dieser eingetragen?
Ein object parameter und ein EventArgs parameter
-
Hallo Siraja,
Die Methode schaut so aus:
private void pb_MouseEnter(object sender, MouseEventArgs e) { MessageBox.Show("Mouse Enter event!"); }
und der Eventhandler so: pb.MouseEnter += new MouseEventHandler(pb_MouseEnter);
Was ich nicht verstehe ist, warum es mit MouseMove funkioniert und mit MouseEnter nicht ?
-
So jetzt hab ichs aber. Danke euch allen für die Unterstützung!
Und zwar ist die Löhsung, das, das Event MouseEnter nur so funktioniert:
pb.MouseEnter += new EventHandler(cards_MouseEnter); und dann: private void cards_MouseEnter(object sender, EventArgs e) { MessageBox.Show("Mouse Enter event!"); }
Mein Fehler war das ich in der EventMethode statt EventArgs , MouseEventArgs verwendet habe.
Komisch ist nur, das bei MouseMove es ein "MouseEventArgs" sein muss, und der
Eventhandler mit "MouseEnventHandler" erzeugt werden muss, und bei "MouseEnter"
wieder ein "EventArgs" welches mit "EventHanlder" erzeugt wird.Danke !
-
Komisch ist das nicht,
beim MouseMove Event sind Daten zur Maus wichtig daher auch eigene MouseEventArgs,
beim MouseEnter Event steht das Steuerelement im Vordergrund daher die Standard EventArgs