Autor |
Beitrag |
brainkopf
Beiträge: 57
Win XP; Win 7
C# (VS 2005/2008)
|
Verfasst: Di 07.07.09 11:07
Hi,
ich muss für die Berufsschule gerade ein kleines Programm schreiben.
Ich habe eine PictureBox und einen Timer. Pro Intervall des Timers werden Linien auf die PictureBox gezeichnet.
Soweit so gut, der Lehrer meinte jetzt aber, wir sollen das erfolgreiche Zeichnen mit einer bool Funktion überprüfen.
Nur wie soll ich das machen? Hab sowas noch nie gemacht und der Lehrer ist extrem inkompetent.
Vielen Dank schon mal im voraus!
Gruß
brainkopf
|
|
JasonDelife
Beiträge: 81
Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
|
Verfasst: Di 07.07.09 15:12
Wenn das zeichnen nicht erfolgreich ist, so wird in (On)Paint(...) eine Exception geworfen.
Das heißt, du kannst ein bool-Member "paintSuccessful" machen und in (On)Paint(...) setzt du ihn als letzte Anweisung des try-Blocks auf true und im catch-Block auf false.
Aber wozu das ganze eigentlich?
Grüße, JasonDelife.
|
|
brainkopf
Beiträge: 57
Win XP; Win 7
C# (VS 2005/2008)
|
Verfasst: Di 07.07.09 15:41
Danke erstmal, aber
das hab ich noch nicht so ganz verstanden.
Ich zeichne mit:
C#-Quelltext 1: 2: 3:
| Graphics gr = Graphics.FromHwnd(linien_pictureBox.Handle); Pen p1 = new Pen(Color.FromArgb(first_color, second_color, third_color), 1); gr.DrawLine(p1, x_middle, y_middle, ix, 0); |
Das ist im Timer_Tick drin.
Laut Lehrer muss das aber in eine bool Funktion.
Nur wie soll das Funktionieren?
Im Timer dann mit try und catch die bool Funktion aufrufen?
Wozu das ganze? Ich hab keine Ahnung, finde diese Abfrage nach erfolgreichem Zeichnen selbst sinnlos.
Gruß
|
|
JasonDelife
Beiträge: 81
Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
|
Verfasst: Di 07.07.09 15:51
So geht das:
C#-Quelltext 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:
| private bool Draw() { bool succes; Graphics gr; Pen p1; try { gr = linien_pictureBox.CreateGraphics(); p1 = new Pen(Color.FromArgb(first_color, second_color, third_color), 1); gr.DrawLine(p1, x_middle, y_middle, ix, 0); succes = true; } catch { succes = false; } finally { p1.Dispose(); gr.Dispose(); } return succes; }
private void timer1_Tick(...) { bool ok = Draw(); if(ok) ; else ; } |
Grüße, JasonDelife.
|
|
Th69
Beiträge: 4764
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 07.07.09 16:19
Sorry, aber das ist alles ganz großer Blödsinn.
Das Zeichnen sollte nur im Paint-Event der PictureBox geschehen und ein Neuzeichnen wird mittels 'PictureBox.Invalidate()' angestossen.
Und im Paint-Event sollte mittels e.Graphics gezeichnet werden (und KEIN CreateGraphics() verwendet werden!!!)
Und das Überprüfen ergibt überhaupt keinen Sinn, denn das Zeichnen macht Windows dann automatisch...
Hier ein sehr gutes Tutorial zum Thema "Zeichnen": www.mycsharp.de/wbb2...d.php?threadid=21782
|
|
JasonDelife
Beiträge: 81
Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
|
Verfasst: Di 07.07.09 16:39
@Th69
Ja, du hast recht. Das habe ich völlig übersehen.
Und das mit dem bool ist auch Schwachsinn.
Also hier die bessere Lösung:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private linien_pictureBox_Paint(object sender, paintEventArgs e) { Graphics gr = e.Graphics; Pen p1 = new Pen(Color.FromArgb(first_color, second_color, third_color), 1); gr.DrawLine(p1, x_middle, y_middle, ix, 0); }
private void timer1_Tick(object sender, EventArgs e) { linien_pictureBox.Invalidate(); } |
Grüße, JasonDelife.
|
|
brainkopf
Beiträge: 57
Win XP; Win 7
C# (VS 2005/2008)
|
Verfasst: Di 07.07.09 16:53
Ich weiß dass das mit dem bool der größte Schwachsinn ist, den man sich vorstellen kann,
aber Vorgabe ist nun mal leider Vorgabe... leider :/
|
|
JasonDelife
Beiträge: 81
Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
|
Verfasst: Di 07.07.09 17:10
Stimmt. Normalerweise ist es auch so, dass das Zeichnen glattläuft. Und wenn nicht, dann wird eine Exception geschmissen. Aber das ist selten und wenn, dann meistens nicht wegen des Zeichnens sondern wegen einer falschen Berechnung innherahlb von Paint.
Was genau ist denn gemaint mit "überprüfen"?
1. Ob es gezeichnent wurde?
2. Ob die Linie noch innerhalb des sichtabren Bereiches ist?
Denn eigentlich lässt sich nichts so richtig überprüfen, was mit dem Zeichnen direkt zu tun hat (außer 2).
Grüße, JasonDelife.
|
|
brainkopf
Beiträge: 57
Win XP; Win 7
C# (VS 2005/2008)
|
Verfasst: Di 07.07.09 19:12
Wie ich das verstanden habe, soll geprüft werden, ob alles richtig gezeichnet wurde.
Im Arbeitsauftrag steht "Funktion bool zeichne(...)"
Da bool ja immer true oder false ist, muss ja irgendwas überprüft werden.
Falls nichts überprüft werden sollte, wärs ja dumm ein bool zu nehmen.
|
|
InCoBra
Beiträge: 43
|
Verfasst: Do 09.07.09 15:28
Naja, also du könntest entweder gucken, ob eine Exception ausgelöst wird oder, was ich für völligen Schwachsinn halte, du könntest hinterher die Pixel, die beim Zeichnen verändert wurden (werden sollten), überprüfen. Aber frag doch nochmal wegen der Vorgabe nach, weil ich sehe, wie die meisten anderen hier auch, nicht wirklich einen Sinn darin...
Gruß
|
|