Hallo Leute,
Ich habe in der letzten Zeit das Lehrbuch von Doberenz, Gewinnus amazon.de/Visual-Basic-2015-Gr…gen&qid=1575837733&sr=8-4
durchgearbeitet. Ich kann das Buch jedem Einsteiger nur wärmstens empfehlen . Ich kam mit dem Material, dem Schreibstiel und dem Aufbau dieses Buches sehr gut zurecht und habe sehr viel daraus gelernt. Am Ende jeden Kapitels habe ich immer ein kleines eigenes kleines Lernprojekt geschrieben das das Gelernte widergespiegelt und vertieft hat. Das lie immer reibungslos!!!!
Nun bin ich bei einem der Bonuskapitel (GDI+). Auch hier lief alles sehr gut.
Bei meinem Lernprojekt gibt es jetzt aber eine kleine Ungereimtheit. Ich möchte die verschiedenen Zeichenoperationen (Pens, Brushes, Regions, Bitmaps etc.) mit Hilfe verschiedener Controls (Buttons, ListBoxen, Sliders etc.) darstellen. Ich möchte direkt auf die Form zeichnen also keine PictureBox verwenden und die Zeichnungen sollen bei Größenänderungen oder Überlappungen mit anderen Fenstern nicht gelöscht werden.
Im Buch wird beim Zeichnen mit CreateGraphics() gearbeitet. Nach einigen Recherchen mit Dr.Google und vor allem hier im Forum habe entdeckt wie und warum CreateGraphics() böse ist und dass nur im PaintEvent des betreffenden Controls in meinem Falle der Form gezeichnet werden sollte. Das habe ich natürlich befolgt.
Die Sache sieht jetzt so aus: Ich habe in meinem BeispielProjekt 2 Buttons. Wird auf einen der beiden geklickt wird dessen Nummer in einer privaten Integer-Variablen gespeichert und es wird an Invalidate(rect) eine Rectanglestruktur übergeben die die Form zwingt diesen Bereich neu zu zeichen.
Es werden beide Zeichnungen parallel auf der Form dargestellt aber nur die die zuletzt gezeichnet wurde wird bei einer Größenänderung der Form nicht gelöscht, die andere schon .
Das ist eigentlich klar denn das Invalidate(rect) erzwingt ja nur das Neuzeichnen eben dieses in der Rectanglestruktur angegebenen Bereiches und nicht beider Bereiche.
Aber wie kann ich es anstellen dass alle durch Buttons, Sliders etc. ausgeführten Zeichnungen nicht gelöscht werden .
Ich suche und probiere schon seit einigen Tagen aber zu diesem Problem finde ich einfach keine Lösung.
Das Beispielprojekt habe ich zur besseren Veranschaulichung auch angehängt!
Könnt Ihr mir da weiterhelfen?
Hier der Source:
Vielen Dank für Eure Mühe und Hilfe vorab,
Duster
Ich habe in der letzten Zeit das Lehrbuch von Doberenz, Gewinnus amazon.de/Visual-Basic-2015-Gr…gen&qid=1575837733&sr=8-4
durchgearbeitet. Ich kann das Buch jedem Einsteiger nur wärmstens empfehlen . Ich kam mit dem Material, dem Schreibstiel und dem Aufbau dieses Buches sehr gut zurecht und habe sehr viel daraus gelernt. Am Ende jeden Kapitels habe ich immer ein kleines eigenes kleines Lernprojekt geschrieben das das Gelernte widergespiegelt und vertieft hat. Das lie immer reibungslos!!!!
Nun bin ich bei einem der Bonuskapitel (GDI+). Auch hier lief alles sehr gut.
Bei meinem Lernprojekt gibt es jetzt aber eine kleine Ungereimtheit. Ich möchte die verschiedenen Zeichenoperationen (Pens, Brushes, Regions, Bitmaps etc.) mit Hilfe verschiedener Controls (Buttons, ListBoxen, Sliders etc.) darstellen. Ich möchte direkt auf die Form zeichnen also keine PictureBox verwenden und die Zeichnungen sollen bei Größenänderungen oder Überlappungen mit anderen Fenstern nicht gelöscht werden.
Im Buch wird beim Zeichnen mit CreateGraphics() gearbeitet. Nach einigen Recherchen mit Dr.Google und vor allem hier im Forum habe entdeckt wie und warum CreateGraphics() böse ist und dass nur im PaintEvent des betreffenden Controls in meinem Falle der Form gezeichnet werden sollte. Das habe ich natürlich befolgt.
Die Sache sieht jetzt so aus: Ich habe in meinem BeispielProjekt 2 Buttons. Wird auf einen der beiden geklickt wird dessen Nummer in einer privaten Integer-Variablen gespeichert und es wird an Invalidate(rect) eine Rectanglestruktur übergeben die die Form zwingt diesen Bereich neu zu zeichen.
Es werden beide Zeichnungen parallel auf der Form dargestellt aber nur die die zuletzt gezeichnet wurde wird bei einer Größenänderung der Form nicht gelöscht, die andere schon .
Das ist eigentlich klar denn das Invalidate(rect) erzwingt ja nur das Neuzeichnen eben dieses in der Rectanglestruktur angegebenen Bereiches und nicht beider Bereiche.
Aber wie kann ich es anstellen dass alle durch Buttons, Sliders etc. ausgeführten Zeichnungen nicht gelöscht werden .
Ich suche und probiere schon seit einigen Tagen aber zu diesem Problem finde ich einfach keine Lösung.
Das Beispielprojekt habe ich zur besseren Veranschaulichung auch angehängt!
Könnt Ihr mir da weiterhelfen?
Hier der Source:
VB.NET-Quellcode
- Option Strict On
- Public Class Form1
- Private ButtonNumber As Integer = 0
- Private Sub CmdTranslateT_Click(sender As Object, e As EventArgs) Handles CmdTranslateTransform.Click
- Dim rect As New Rectangle(0, 0, 102, 102)
- ButtonNumber = 1
- Me.Invalidate(rect)
- End Sub
- Private Sub CmdScaleT_Click(sender As Object, e As EventArgs) Handles CmdScaleT.Click
- Dim rect As New Rectangle(250, 50, 102, 102)
- ButtonNumber = 2
- Me.Invalidate(rect)
- End Sub
- Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
- Select Case ButtonNumber
- Case 1
- e.Graphics .DrawRectangle(New Pen(Color.Red),0, 0, 101, 101)
- e.Graphics.DrawEllipse(New Pen(Color.Black), 0, 0, 100, 100)
- Case 2
- e.Graphics .DrawRectangle(New Pen(Color.Red),250, 50, 101, 101)
- e.Graphics.DrawEllipse(New Pen(Color.Black), 250, 50, 100, 100)
- End Select
- End Sub
- End Class
Vielen Dank für Eure Mühe und Hilfe vorab,
Duster