Grafiken verschieben

hallo,

ich suche eine möglichkeit, in vb.net grafiken zu verschieben.
genauer gesagt, habe ich einen punkt in einem koordinatensystem erstellt und möchte diesen nun verschieben.

erstellt habe ich den punkt (bzw. den ausgefüllten kreis) so:

Private Sub ButtonPunkt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPunkt.Click
Dim g As Graphics
Dim p As Pen
Dim r As Rectangle

g = Me.CreateGraphics()
p = New Pen(System.Drawing.Color.Red)
r = New Rectangle((tbpx.Text - 2), (tbpy.Text - 2), 4, 4)
g.DrawEllipse(p, r)
g.FillEllipse(Brushes.Red, r)

End Sub

ich suche nun halt nach irgend ner methode, diesen zu verschieben.
kann mir da jemand weiterhelfen?

mfg Gut4You

hallo,

Hi!

ich suche eine möglichkeit, in vb.net grafiken zu verschieben.
genauer gesagt, habe ich einen punkt in einem
koordinatensystem erstellt und möchte diesen nun verschieben.

erstellt habe ich den punkt (bzw. den ausgefüllten kreis) so:

Private Sub ButtonPunkt_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonPunkt.Click
Dim g As Graphics
Dim p As Pen
Dim r As Rectangle

g = Me.CreateGraphics()
p = New Pen(System.Drawing.Color.Red)
r = New Rectangle((tbpx.Text - 2), (tbpy.Text - 2), 4,
4)
g.DrawEllipse(p, r)
g.FillEllipse(Brushes.Red, r)

End Sub

Argh! Wo hast Du das denn her?

  1. Zeichenfunktionen ausserhalb der OnPaint-Methoden sind BÖSE (weil sie beim nächsten Neuzeichnen des Controls überpinselt werden).
  2. GDI-Objekte (Pen, Brush, Graphics,…) zu erzeugen ohne sie mittels Dispose freizugeben ist BÖSE (weil das zu Ressourcenlecks führt, die das Programm nach einiger Zeit in den Abgrund reissen).
  3. Integerwerte von Stringwerten abzuziehen („tbpx.Text - 2“) ist totaler Unsinn, der sich nicht mal übersetzen lassen darf!

Und wenn ich noch länger drauf schau, finde ich bestimmt noch was :wink:

ich suche nun halt nach irgend ner methode, diesen zu
verschieben.
kann mir da jemand weiterhelfen?

mfg Gut4You

Vernünftig löst Du es folgendermaßen:

  1. Du verlegst alle Zeichenoperationen in die überschriebene OnPaint() Methode Deines Koordinatensystems. Dann brauchst Du auch kein CreateGraphics(), weil das zu verwendende Graphics-Objekt als Teil der PaintEventArgs mitgegeben wird.
  2. Dein Control muss sich z.B. in einer Liste die Elemente (Punkte/Kreise/Sonstwas) merken, die dargestellt werden sollen. Jedes Element hat dann auch u.a. die Info, wo es dargestellt werden soll (Koordinaten).
  3. Um dann den Punkt zu verschieben, musst Du mehr machen, als nur das Click Event zu behandeln. Bei MouseDown schaust Du nach, welches Element getroffen wurde und merkst Dir, dass jetzt geschoben wird. Im MouseMove Event veränderst Du die Position des betroffenen Elements, falls geschoben wird (und forderst das Control mittels Invalidate() zum neu Zeichnen auf) und beim MouseUp Event setzt Du die Info, dass gerade geschoben wird, wieder zurück.

Gruß,
Martin

oh ha…
also, wenn ich deine Einwände so lese, würd ich mal sagen, dass ich mir einfach mal so ein tutorial dazu von vorn bis hinten reinziehen sollte ^^

hab ich nämlich bisher nicht gemacht, sondern einfach versucht, aus irgendwelchen codes schlau zu werden.

dem string/integer fehler sollte man keine all zu große beachtung schenken…das hab ich mir da nur so provisorisch reingekritzelt.
sollte da eigentlich wieder raus.

hab im internet das hier gefunden: http://www.galileocomputing.de/openbook/visual_basic…

ist es ratsam, das mal durchzugehen?

oh ha…
also, wenn ich deine Einwände so lese, würd ich mal sagen,
dass ich mir einfach mal so ein tutorial dazu von vorn bis
hinten reinziehen sollte ^^

*G* Jup, wäre vermutlich nicht schlecht - und dabei vermutlich auch weniger frustrationsträchtig als trial&error

hab ich nämlich bisher nicht gemacht, sondern einfach
versucht, aus irgendwelchen codes schlau zu werden.

dem string/integer fehler sollte man keine all zu große
beachtung schenken…das hab ich mir da nur so provisorisch
reingekritzelt.
sollte da eigentlich wieder raus.

hab im internet das hier gefunden:
http://www.galileocomputing.de/openbook/visual_basic…

ist es ratsam, das mal durchzugehen?

Auf jeden Fall.
Dort wird zwar auch CreateGraphics() erwähnt, aber vorher der (in aller Regel bessere) Weg über das Paint-Ereignis vorgestellt.
Und ein bisschen weiter unten steht auch der Hinweis, immer Dispose aufzurufen, also nach kurzem Überfliegen empfehlenswert… :smile:

Dann viel Spaß beim Durchackern…
Martin