[VB2008] Bild innerhalb Form1 verschieben

Christoph Haas

Mitglied
Hallo,

ich hab keine Ahnung ob ich in diesem Forum richtig bin, aber ich habe da ein Problem und hoffe mir kann geholfen werden.
Also, wie der Titel schon sagt, würde ich gerne eine PictureBox innerhalb eines Forms frei verschieben können. Ist dies möglich und wenn ja, wie!?:confused:

Danke im voraus!
 
Schnell ein kleiner gefrickelter Code:
Visual Basic:
    Public bButton As Boolean, bFirst As Boolean, iX As Integer, iY As Integer
    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        bButton = True
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If bButton Then
            If Not bFirst Then
                bFirst = True
                iX = e.X
                iY = e.Y
            End If
            PictureBox1.Left = PictureBox1.Left + e.X - iX
            PictureBox1.Top = PictureBox1.Top + e.Y - iY
        End If
    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        bButton = False
        bFirst = False
    End Sub

Das System merkt sich auch, wo in der Box du geklickt hast und verschiebt sie korrekt auf der Form.


Der Doc!
 
Zuletzt bearbeitet:
Ok danke, das hat super funktioniert.
Ich habe den Code noch ein Wenig erweitert um die Position in einer Accessdatenbank zu speichern, welches auch funktioniert.
Wenn ich die Applikation erneut starten will, soll die Position ausgelesen werden, und das Bild an der entsprechenden X und Y Position auftauchen.

hier mal der Code, mit dem Vermerk, wo der Fehler sein könnte:
Visual Basic:
Public Class Form1
    Dim con As New OleDb.OleDbConnection
    Dim cmd As New OleDb.OleDbCommand
    Dim reader As OleDb.OleDbDataReader
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                "Data Source=C:\Temp\datenbank.mdb"
        cmd.Connection = con

        Try
            con.Open()
            cmd.CommandText = "Select * from picture"
            reader = cmd.ExecuteReader()
            reader.Read()
            PictureBox1.Location = reader("x, y") 'hier muss der Fehler sein!
                                                  'es wird eine MsgBox mit "x,y" angezeigt!?
            reader.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        con.Close()
    End Sub
    Public bButton As Boolean
    Public bFirst As Boolean, iX As Integer, iY As Integer
    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        bButton = True
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If bButton Then
            If Not bFirst Then
                bFirst = True
                iX = e.X
                iY = e.Y
            End If
            PictureBox1.Left = PictureBox1.Left + e.X - iX
            PictureBox1.Top = PictureBox1.Top + e.Y - iY
        End If
    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Dim anzahl As Integer
        Try
            con.Open()
            cmd.CommandText = _
               "update picture set " & _
               "x = '" & iX & "', " & _
               "y = '" & iY & "'"
            'MsgBox(cmd.CommandText)
            anzahl = cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        con.Close()
        bButton = False
        bFirst = False
    End Sub
End Class

Für Lösungsvorschläge wäre ich dankbar. :)
 
Ich kann das ganze mangels DB jetzt nicht testen, eigentlich sieht die Syntax für Location so aus:
Visual Basic:
<Element>.Location = New Point(x, y)

Mal davon abgesehen hast du einen Denkfehler bei der Speicherung, du speicherst das hier:
Visual Basic:
               "update picture set " & _
               "x = '" & iX & "', " & _
               "y = '" & iY & "'"
Die Variable iX und iY beinhalten nicht die Position der PictureBox sondern die Position des Mauscursors in der Box, wenn man auf den Button klickt. Richtigerweise müsstest du also folgend speichern:
Visual Basic:
               "update picture set " & _
               "x = '" & PictureBox1.Left & "', " & _
               "y = '" & PictureBox1.Top & "'"


Der Doc!
 
Ich kann das ganze mangels DB jetzt nicht testen, eigentlich sieht die Syntax für Location so aus:
Visual Basic:
<Element>.Location = New Point(x, y)
[...]

Der Doc!

Ist richtig, nur will ich ja die gespeicherte Position auslesen und das Bild soll dort wieder geladen werden.
Ich probier noch mal bisschen rum, dank dir schonmal auf jedenfall.

Christoph


##EDIT##

So, habe es jetzt

Visual Basic:
'..................
Try
            Dim x As Integer
            Dim y As Integer

            con.Open()
            cmd.CommandText = "Select * from picture"
            reader = cmd.ExecuteReader()
            reader.Read()
            x = reader("x")
            y = reader("y")
            PictureBox1.Location = New Point(x, y)
            reader.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        con.Close()
'..................
 

Neue Beiträge

Zurück