Rubrik: Oberfläche · Fenster | VB-Versionen: VB.NET | 18.02.08 |
Verschieben über den Bildschirmrand unterbinden (.NET) Das Verschieben einer Form über den Bildschirmrand wird verhindert. | ||
Autor: Heinz Prelle | Bewertung: | Views: 8.756 |
www.visual-basic5.de | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Heute zeigen wir Ihnen, wie sich verhindern lässt, dass eine Form durch den Benutzer aus den sichtbaren Bildschirmbereich hinaus verschoben werden kann.
' Beispiel: VB .Net ' Form - Verschieben ueber den Bildschirm hinaus verhindern ' Hinweis : Die Taskleiste wird nicht beruecksichtigt. ' D.h. verschoben wird hinter die Taskleiste Option Explicit On Option Strict On Imports System.Runtime.InteropServices Public Class Form1
Private Structure Rectangle Public Left As Int32 Public Top As Int32 Public Right As Int32 Public Bottom As Int32 Public ReadOnly Property Width() As Integer Get Return Right - Left End Get End Property Public ReadOnly Property Height() As Integer Get Return Bottom - Top End Get End Property End Structure
Private Sub MemoryBlock( _ ByVal rect As Object, _ ByVal msg As System.IntPtr, _ Optional ByVal Destroy As Boolean = True) System.Runtime.InteropServices.Marshal.StructureToPtr(rect, msg, Destroy) End Sub
' Windows-Message Private Const WM_MOVING As Int32 = &H216
' Fenster-Nachricht abfangen und reagieren Protected Overrides Sub WndProc(ByRef msg As System.Windows.Forms.Message) If msg.Msg = WM_MOVING Then Dim rect As Rectangle = DirectCast(Marshal.PtrToStructure( _ msg.LParam, GetType(Rectangle)), Rectangle) With rect If .Left < Screen.PrimaryScreen.Bounds.Left Then Dim Width As Integer = .Width .Left = 0 .Right = Width MemoryBlock(rect, msg.LParam) ElseIf .Top < Screen.PrimaryScreen.Bounds.Top Then Dim Height As Integer = .Height .Top = 0 .Bottom = Height MemoryBlock(rect, msg.LParam) ElseIf .Right > Screen.PrimaryScreen.Bounds.Right Then Dim Width As Integer = .Width .Right = Screen.PrimaryScreen.Bounds.Right .Left = .Right - Width MemoryBlock(rect, msg.LParam) ElseIf .Bottom > Screen.PrimaryScreen.Bounds.Bottom Then Dim Height As Integer = .Height .Bottom = Screen.PrimaryScreen.Bounds.Bottom .Top = .Bottom - Height MemoryBlock(rect, msg.LParam) End If End With End If MyBase.WndProc(msg) End Sub
End Class