Hallo,
ich möchte mit VB2010 ein Bild (PictureBox) auf dem Formular von unten nach Oben bewegen (von 600 auf 0).
Wenn ich das über einen CommandButton mache, funktioniert das auch wie erwartet.
Wenn ich aber versuche das Bild über eine Schleife zu steuern, ist es direkt nach dem Start am Ziel angekommen (klar, das ganze ist halt zu schnell). Jetzt habe ich versucht, das ganze über eine Verzögerung in der Schleife etwas langsamer zu gestalten.
Das klappt aber leider nicht. Der Versuch über einen Timer ist fehlgeschlagen; der wurde ignoriert. Dann habe ich es noch über System.Threading.Thread.Sleep
versucht.
Dabei wird aber das Bild nur von unten Zeile für Zeile "aufgefressen", um kurz danach am Ziel aufzutauchen. Das Bild bewegt sich also nicht wie gewünscht.
System.Threading.Thread.Sleep ist aber auch nicht die beste Wahl, da während der "Pause" andere CommandButtons nicht mehr nutzbar sind (sind noch nicht eingebaut).
Hat jemand eine Idee, wie man das elegant lösen kann?
Mein bisheriger Versuch:
ich möchte mit VB2010 ein Bild (PictureBox) auf dem Formular von unten nach Oben bewegen (von 600 auf 0).
Wenn ich das über einen CommandButton mache, funktioniert das auch wie erwartet.
Wenn ich aber versuche das Bild über eine Schleife zu steuern, ist es direkt nach dem Start am Ziel angekommen (klar, das ganze ist halt zu schnell). Jetzt habe ich versucht, das ganze über eine Verzögerung in der Schleife etwas langsamer zu gestalten.
Das klappt aber leider nicht. Der Versuch über einen Timer ist fehlgeschlagen; der wurde ignoriert. Dann habe ich es noch über System.Threading.Thread.Sleep
versucht.
Dabei wird aber das Bild nur von unten Zeile für Zeile "aufgefressen", um kurz danach am Ziel aufzutauchen. Das Bild bewegt sich also nicht wie gewünscht.
System.Threading.Thread.Sleep ist aber auch nicht die beste Wahl, da während der "Pause" andere CommandButtons nicht mehr nutzbar sind (sind noch nicht eingebaut).
Hat jemand eine Idee, wie man das elegant lösen kann?
Mein bisheriger Versuch:
VB.NET-Quellcode
- Imports System.IO
- Imports System.Threading
- Public Class Form1
- Public i As Integer
- Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
- BildAuto.Location = New Point(BildAuto.Location.X, 600)
- Timer1.Interval = 2000
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles cmdStart.Click
- Call moveIt()
- End Sub
- Private Sub moveIt()
- For i = 600 To 0 Step -1
- BildAuto.Location = New Point(BildAuto.Location.X, i) 'BildAuto.Location = New Point(BildAuto.Location.X, BildAuto.Location.Y + i)
- TxtWert.Text = CStr(BildAuto.Location.Y)
- txtTimer.Text = CStr(Timer1.Interval)
- 'Timer1.Start()
- System.Threading.Thread.Sleep(10)
- Next (i)
- End Sub
- Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
- ' Timer1.Stop()
- End Sub
- Private Sub cmdManuell_Click(sender As System.Object, e As System.EventArgs) Handles cmdManuell.Click
- BildAuto.Location = New Point(BildAuto.Location.X, BildAuto.Location.Y - 4)
- TxtWert.Text = CStr(BildAuto.Location.Y)
- End Sub
- Private Sub cmdReset_Click(sender As System.Object, e As System.EventArgs) Handles cmdReset.Click
- BildAuto.Location = New Point(BildAuto.Location.X, 600)
- TxtWert.Text = CStr(BildAuto.Location.Y)
- End Sub
- End Class