Hilfe zu code
-
Warum wird meine Linie nicht gezeichnet ?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(new Pen(Brushes.Red, 6), 12, 20, 120, 200); } } }
-
oder sagen wir so
wieso wird meine form1_paint methode nicht aufgerufen ?
-
Hast du die Methode denn überhaupt abonniert (d.h. im Designer bei den Events per Doppelklick)?
Ansonsten per Code im Konstruktor:
public Form1() { InitializeComponent(); this.Paint += Form1_Paint; // <- dies nennt man "Ereignis abonnieren" }
-
aha. jetzt gehts
was soll das +=
-
Das += verknüpft einen Event-Handler (also deine Methode) mit einem Event (hier dem Paint-Event). Mit -= kannst du die Verknüpfung wieder aufheben.
Beides imo eine selten dumme Operatorüberladung. Fast so dumm wie << für output in C++.
-
So dumm ist die '+='-Schreibweise nicht, denn es handelt sich ja bei einem Ereignis um einen Multicast-Delegate, d.h. man hängt eine Methoden an die interne Liste.
Darum muß man auch aufpassen, daß man nicht aus Versehen mehrmals die gleiche Methode an ein Ereignis (Event) anhängt, da dann die Methode auch mehrmals ausgeführt wird (evtl. nur Performanceprobleme, meistens aber ein logischer Fehler).Für Programmierung mit dynamisch erzeugten Objekten sollte man also immer für jeden '+=' auch ein entsprechendes '-=' aufrufen...
-
Th69 schrieb:
So dumm ist die '+='-Schreibweise nicht, denn es handelt sich ja bei einem Ereignis um einen Multicast-Delegate, d.h. man hängt eine Methoden an die interne Liste.
Das ist mir schon klar
Es ist nur so: Wann sollte man Operatoren überladen? Wenn es der intuitiven (!) Benutzung von komplexen Objekten dient. Das ist hier für mich nicht der Fall. Klar, wenn man etwas darüber nachdenkt, dann kann man die Wahl von += irgendwie nachvollziehen. Aber ein simples "AddHandler/RemoveHandler" wäre imo klarer gewesen.