Zum Inhalt springen

[c#] graphics-Objekt neu Zeichnen


Beckerman2609

Empfohlene Beiträge

Hallo zusammen,

in meinem Programm zeichne ich mittels "Graphics.CreateGraphics" eine variierbare Anzahl an Quadraten auf ein Panel. Ist die Anzahl an gezeichneten Quadraten so hoch, dass die Quadrate nicht mehr auf den Bildschirm passen, soll man mittels einer "HScrollBar" die Grafik nach rechts bzw. links verschieben können.

Das verschieben über die ScrollBar funktioniert soweit schon ganz gut. Leider finde ich keine Möglichkeit die Grafik neu zuzeichnen. Sowas wie "Graphics.refresh()" scheint es ja nicht zu geben. Aber sowas suche ich. Einen Befehl mit dem ich das Graphics-Objekt neu zeichnen kann.

Schonmal danke im Vorraus fürs Überlegen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antwort.

Habe das auch schon ausprobiert gehabt. Hat leider nicht funktioniert. Sobald sich die Position auch nur um einen Pixel ändert verschwindet das ganze Graphics-Objekt. Wenn ich dann über einen Button die Zeichenfunktion erneut aufrufe werden die Quadrate um den geänderten Faktor jedoch gezeichnet.

So sieht derzeit meine Methode aus:

private void hScrollBar1_ValueChanged(object sender, EventArgs e)

{

int xNeu = 6 - (hScrollBar1.Value * tileBreiteHöhe);

Point i = new Point(xNeu, pnMap.Location.Y);

pnMap.Location = i;

pnMap.Refresh();

}

Möglich das es hierbei irgendeinen Fehler gibt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da liegt ja gerade das Problem. Die Grafik lässt sich nicht eben neu zeichnen. Was mir fehlt ist so eine Art "Graphics.refresh()", aber das gibt es leider nicht. Heißt das ich muss bei jeder Änderung alle Quadrate mittels Schleifendurchlauf neu zeichnen? Hab das auch mal ausprobiert. Dauert bei höherer Anzahl von Quadraten aber dementsprechend lange. Außerdem ist der Flimmer-Effekt zwischen Verschwinden der alten Abbildung und der neu zu zeichnenden unschön.

Gibt es nicht eine simple Möglichkeit die Grafik neu zuzeichnen. Ich ändere ja nichts auf der Grafik. Nur das Control auf dem es platziert ist ändert sich.

Habe auch schon auf eine PictureBox gezeichnet und diese versucht mittel ".refresh" neu zeichnen zu lassen, aber gleiches Ergebnis. Scheint mir alles etwas seltsam...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da liegt ja gerade das Problem. Die Grafik lässt sich nicht eben neu zeichnen.

Du musst die Grafik bei Bedarf neu zeichnen. Das Paint-Event signalisiert Dir wann.

Heißt das ich muss bei jeder Änderung alle Quadrate mittels Schleifendurchlauf neu zeichnen?

Ja, natürlich. Wenn das Zeichnen lange dauert, dann kann man mit double buffering und dem Zwischenspeichern bereits rasterisierter Grafiken (oder einzelner Teile davon) arbeiten.

Scheint mir alles etwas seltsam...

Ist es aber nicht, das ist der ganz normale Ablauf. Du stellst es Dir etwas einfach vor. Das Graphics-Objekt merkt sich nicht, was Du mit ihm gemacht hast, es kann die Schritte daher auch nicht selbstständig wiederholen.

Wenn Du z.B. WPF verwendest, könntest Du zwar Vektorgrafiken in einer Art anlegen, so dass Du Dich selbst nicht selbst um erneut nötiges Zeichnen kümmern musst. Aber auch wenn Du es nicht selbst tun musst: Falls es erforderlich ist, werden die Grafiken neu gezeichnet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine einfache Möglichkeit ist eigentlich eine Funktion zu schreiben die als Parameter das Graphics Objekt erwartet und in diese Funktion schreibst du deine ganzen Zeichnungen oder weitere Funktionsaufrufe die etwas zeichnen. Und diese Funktion rufst du dann immer im Paint-Event des Panels auf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...