Rubrik: Oberfläche · Fenster | VB-Versionen: VB.NET | 21.12.06 |
Verschieben von Fenster ohne Titelzeile Hier wird gezeigt, wie sich unter VB.NET ein Fenster ohne Titelzeile per Maus verschieben lässt. | ||
Autor: Dieter Otter | Bewertung: | Views: 14.521 |
www.tools4vb.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Ein Fenster ohne Titelzeile kann bekanntlich nicht mit der Maus verschoben werden. Wie man das aber dennoch realisieren kann, soll nachfolgender Tipp zeigen.
Erstellen Sie ein neues Windows-Forms Projekt und setzen die Form-Eigenschaft "FormBorderStyle" auf den Wert "None". Per Mausklick auf einen freien Bereich der Form soll das Fenster dann verschoben werden können. Hierzu müssen wir uns im "MouseDown"-Ereignis die aktuelle Fenster-, sowie die aktuelle Mausposition merken und zwischenspeichern. Die Zwischenspeicherung der Koordinaten erfolgt in den beiden lokalen Variablen "nStartPos" und "nDragPos". Im MouseMove-Ereignis der Form wird die aktuelle Mauspositon neu ermittelt und das Fenster entsprechend an die neue Position verschoben.
Public Class Form1 ' Maus-Koordinaten Dim nStartPos As Point Dim nDragPos As Point
Private Sub Form1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown ' Position des Fensters und der Maus merken If e.Button = Windows.Forms.MouseButtons.Left Then nStartPos = Me.Location nDragPos = Me.PointToScreen(New Point(e.X, e.Y)) End If End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then ' aktuelle Mausposition bezogen auf den Desktop Dim nCurPos As Point = Me.PointToScreen(New Point(e.X, e.Y)) ' Fenster an neuen Position verschieben Me.Location = New Point(nStartPos.X + nCurPos.X - nDragPos.X, _ nStartPos.Y + nCurPos.Y - nDragPos.Y) End If End Sub End Class
Das war's dann auch schon.
Erweiterung: Platzieren Sie auf die Form ein "Panel"-Control mit folgenden Eigenschaften:
- Size.Height = 21
- BackColor = Color.ActiveCaption
- Dock = DockStyle.Top
... Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' Panel1-Ereignisbehandlung umleiten AddHandler Panel1.MouseDown, AddressOf Form1_MouseDown AddHandler Panel1.MouseMove, AddressOf Form1_MouseMove End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Ereignisbehandlung wieder lösen RemoveHandler Panel1.MouseDown, AddressOf Form1_MouseDown RemoveHandler Panel1.MouseMove, AddressOf Form1_MouseMove End Sub ...