Rubrik: Controls | VB-Versionen: VB2005, VB2008 | 25.09.08 |
Control zur Laufzeit beliebig verschieben Dieser Tipp zeigt, wie sich Controls zur Laufzeit beliebig innerhalb der Form verschieben und somit durch den Anwender neu positionieren lassen. | ||
Autor: Dieter Otter | Bewertung: | Views: 23.120 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
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