PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# DrawLine will nicht?


Gast
2008-11-12, 17:32:36
Hey,

leider weiß ich nicht, was ich bei folgendem Vorhaben falsch mache:

Ich will auf eine leere Form eine Linie malen, das ist alles.
Also schreibe ich in den Code der Form1 folgendes Paint-Event, was ja beim starten ausgeführt werden müsste:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawLine(new Pen(Color.Red, 8), new Point(100, 100), new Point(400, 400));
}


Doch das Fenster bleibt grau. Wie gesagt, das Stück Code befindet sich in Form1 (public partial class Form1 : Form) direkt unter Form1_Load.

Danke

robobimbo
2008-11-12, 21:28:06
Bei OnLoad wird das Zeug ja nur einmal gezeichnet, wenn dass Fenster dann neu gezeichnet wird ist deine Linie dann weg.

protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawLine(new Pen(Color.Red, 8), new Point(100, 100), new Point(400, 400));
}

Daher kannst du die OnPaint Mehtode überschreiben und dort deinen Zeichenkünsten freien Lauf lassen

Coda
2008-11-12, 21:44:28
Was hat das mit DirectDraw zu tun Oo

robobimbo
2008-11-12, 21:49:38
gornix :)

Ausser dass man direct ins Windows drawt :D

Gast
2008-11-13, 18:11:41
Vergesst das mit DirectDraw, keine Ahnung wie ich da drauf kam :D

@robobimbo: ich will ja auch gar nicht in onload schreiben ;)

Das Problem war einfach nur, dass ich vergessen hatte, Form1_Paint zu registrieren, jetzt gehts. Aber wofür ist dieses OnPaint gut? So wie du es beschreibst, macht es das gleiche wie mein Form1_Paint?

TheGamer
2008-11-14, 08:02:41
Vergesst das mit DirectDraw, keine Ahnung wie ich da drauf kam :D

@robobimbo: ich will ja auch gar nicht in onload schreiben ;)

Das Problem war einfach nur, dass ich vergessen hatte, Form1_Paint zu registrieren, jetzt gehts. Aber wofür ist dieses OnPaint gut? So wie du es beschreibst, macht es das gleiche wie mein Form1_Paint?

Weils dasselbe ist ;)

OnPaint heisst das Event
Form1_Paint ist der Eventhandler zu dem Event. Die Namensgebung deutet darauf hin das du den Eventhandler durch Visual Studio hast erstellen lassen.

MuLuNGuS
2008-11-14, 09:14:50
nicht vergessen:

die basisversion von OnPaint ist es die den eventhandler aufruft, in deinem fall Forrm1_Paint.

wird also OnPaint überschrieben muß mit "base" die basisversion aufgerufen werden um auch den eventhandler auszulösen.

*edit*
bei der automatischen codegenerierung wird das allerdings gleich mit eingefügt.