Autor |
Beitrag |
Molchi
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 08.11.10 13:45
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
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
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mo 08.11.10 13:52
Ich vermute mal nachdem du dein Rechteck zeichnest wird die Winform nochmal neu gezeichnet. (Event: Paint)
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mo 08.11.10 14:59
Na du nimmst natürlich das Paint-Event von dem Control/Form auf dem du zeichnen möchtest.
Für diesen Beitrag haben gedankt: Molchi
|
|
Molchi
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
|
|
Th69
Beiträge: 4764
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 08.11.10 15:41
Hallo Molchi,
ein gutes Tutorial gibt es unter [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox).
Beachte, daß du im Paint-Ereignis dann "e.Graphics" anstatt CreateGraphics() verwenden mußt!
|
|