Entwickler-Ecke
WinForms - Grafiken: was mache ich falsch?
Molchi - Mo 08.11.10 13:45
Titel: Grafiken: was mache ich falsch?
Hallo zusammen!
Mal eine blöde Frage:
was mache ich in untem abgedruckten Code (VisualStudio) falsch? Es sollte, so dachte ich es mir, ein 5*5-Pixel großes Rechteck erscheinen, dessen obere linke Ecke an den Koordinaten x=5, y=5 sitzt. Nun habe ich ehrlich gesagt dieses ganze Grafik-Konzept unter C-Sharp niemals wirklich verinnerlicht (bin ein klassischer sequentieller Konsolenprogrammierer). Nur, so in dem Stil wie hier hatte ich es schonmal in einer Windows-forms-Anwendung hinbekommen, einfache geometische Strukturen zu zeichnen. Ein Graphics-Objekt generieren. Einen Pen definieren. Den Pen zum Malen in Graphics aufrufen. Eigentlich habe ich hier genau das selbe getan. Aber irgend eine kleine Dummheit verhindert hier wohl, dass man ein Rechteck sieht.
Wie kann man diesen Code funktionstüchtig bekommen? (Vielleicht raffe ich dann endlich mal, was genau es mit dieser "Graphics"-Geschichte auf sich hat).
Danke und Grüße
Mario
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: 29: 30: 31:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace WindowsApplication11 { public partial class Form1 : Form { Graphics g; Pen Stift;
public Form1() { InitializeComponent(); Stift = new Pen(Color.Black); g = this.CreateGraphics(); g.DrawRectangle(Stift, 5, 5, 5, 5); }
private void Form1_Load(object sender, EventArgs e) {
} } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
bakachan - Mo 08.11.10 13:52
Ich vermute mal nachdem du dein Rechteck zeichnest wird die Winform nochmal neu gezeichnet. (Event: Paint)
Ralf Jansen - Mo 08.11.10 13:55
Dein DrawRectangle gehört ein den Paint Event der Form. In den EventArgs des Events befindet sich dann schon ein zu benutzendes Graphics Object.
So wie jetzt wird dein Rectangle 1mal gezeichnet und sofort beim ersten Paint überzeichnet.
Molchi - Mo 08.11.10 14:00
Aber welches "Paint" überzeichnet da meine Grafik? Nach "InitializeComponent();" wird doch (außer den Befehlen zum Zeichnen) nichts mehr aufgerufen? Das Fenster steht doch und ist fertig, oder swehe ich das falsch?
Ralf Jansen - Mo 08.11.10 14:31
a.) Im Constructor nach InitializeComponent ist dein Form erzeugt aber noch lange nicht angezeigt. Das kommt erst beim Show(bzw. ShowDialog).
b.) Und auch wenn das Zeichnen im Konstruktor bis zum anzeigen überleben würde. Wäre es nur kurzfristig vorhanden und beim zum nächsten zeichnen(z.B nach minimieren-maximieren, in älteren Windows Version einfach drüber ziehen eines anderen Fensters etc.) weg.
Molchi - Mo 08.11.10 14:56
Okay, vielen Dank.
Auf ähnlichem Wege hatte ich schonmal erfolgreich Grafiken erzeugt, doch irgendwas habe ich da anscheinend doch anders gemacht, denn sonst würde es ja jetzt auch klappen.
Gibt es zum Thema "Paint Event" irgendwo ein hilfreiches Tutorial? Das meiste, was sich hierzu bei den ersten Google-Ergebnissen findet, ist leider nicht sehr intuitiv verständlich für jemanden, der noch nicht viel (um nicht zu sagen: gar nichts) mit eventorientierten Programmierkonzepten zu tun hatte (ich suche vorerst wirklich nur nach einer ganz simplen und praktikablen Lösung, die für rechteckige Objekte anwendbar ist).
Grüße
Mario
bakachan - Mo 08.11.10 14:59
Na du nimmst natürlich das Paint-Event von dem Control/Form auf dem du zeichnen möchtest.
Molchi - Mo 08.11.10 15:10
Achso, jetzt erst sehe ich, dass Visual Studio das "Paint Event" ja gleich mitliefert. Vielen Dank für den Hinweis, ich habe viel zu kompliziert gedacht. Wie es aussieht, klappt es jetzt :-)
Grüße
Mario
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!