Beckerman2609 Geschrieben 7. August 2009 Teilen Geschrieben 7. August 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
chrixko Geschrieben 7. August 2009 Teilen Geschrieben 7. August 2009 Du kannst einfach das Panel-Refreshen. Panel1.Refresh(); [/PHP] Dadurch wird das Paint-Ereignis automatisch aufgerufen und alle Grafiken neu gezeichnet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beckerman2609 Geschrieben 8. August 2009 Autor Teilen Geschrieben 8. August 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 8. August 2009 Teilen Geschrieben 8. August 2009 Möglich das es hierbei irgendeinen Fehler gibt? Das kann man aufgrund des zu kurzen Programm-Ausschnittes nicht richtig beurteilen. Dir ist aber klar, dass Du die Grafik bei jedem Paint-Event neu zeichnen musst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beckerman2609 Geschrieben 8. August 2009 Autor Teilen Geschrieben 8. August 2009 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 8. August 2009 Teilen Geschrieben 8. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
chrixko Geschrieben 9. August 2009 Teilen Geschrieben 9. August 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.