Rubrik: Controls | VB-Versionen: VB2005, VB2008 | 25.09.08 |
Mit nachfolgendem Code lässt sich ein Control zur Laufzeit durch den Anwender beliebig innerhalb einer Form verschieben.
Erstellen Sie ein neues Windows-Forms-Projekt, platzieren auf die Form eine PictureBox und fügen nachfolgenden Code in den Codeteil der Form ein:
Public Class Form1
' Maus-Koordinaten
Dim nStartPos As Point
Dim nDragPos As Point
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
' aktuelle Position des Controls und der Maus merken
If e.Button = Windows.Forms.MouseButtons.Left Then
nStartPos = PictureBox1.Location
nDragPos = PictureBox1.PointToScreen(New Point(e.X, e.Y))
End If
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
' aktuelle Mausposition bezogen auf den Desktop ermitteln
Dim nCurPos As Point = PictureBox1.PointToScreen(New Point(e.X, e.Y))
' Neue Position des Controls berechnen
Dim nNewPos As New Point(nStartPos.X + nCurPos.X - nDragPos.X, _
nStartPos.Y + nCurPos.Y - nDragPos.Y)
' Neue Koordianten prüfen und sicherstellen, dass das Control
' nicht aus den sichtbaren Bereich der Form verschoben wird
With nNewPos
If .X < Me.ClientRectangle.Left Then .X = Me.ClientRectangle.Left
If .X + PictureBox1.Width > Me.ClientRectangle.Right Then
.X = Me.ClientRectangle.Right - PictureBox1.Width
End If
If .Y < Me.ClientRectangle.Top Then .Y = Me.ClientRectangle.Top
If .Y + PictureBox1.Height > Me.ClientRectangle.Bottom Then
.Y = Me.ClientRectangle.Bottom - PictureBox1.Height
End If
End With
' Control an neuen Position verschieben
PictureBox1.Location = nNewPos
End If
End Sub
End Class