将窗体吸附到屏幕边界的简单方法
将无边框窗体吸附到屏幕边缘的一种简单方法。
背景
我一直在寻找一种方法,让窗体像 WinAmp 一样吸附到屏幕边缘,并在网上找到了一些方法。但是我的窗体没有边框(FormBorderStyle = None
),我找到的代码对于没有边框的窗体效果不佳。它也似乎对初学者来说有点复杂(几乎像我一样!),所以我尝试自己编写,并编写了一个更简单易懂的代码。 这也是一种非常简单的方法来移动没有边框的窗体。
代码
以下变量应在 Public Class
之后立即声明,以便其他过程可以访问它们。
Dim X1 As Integer, Y1 As Integer, WR As Rectangle
现在将以下代码放入窗体的 MouseDown
事件中
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseDown
X1 = e.X
Y1 = e.Y
WR = Screen.GetWorkingArea(Me)
End Sub
这段代码记录了鼠标单击的位置以及桌面的工作区域。现在代码的主要部分应该放在窗体的 MouseMove
事件中。
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseMove
If Not e.Button = Windows.Forms.MouseButtons.Left Then Exit Sub
Dim NewX As Integer = Me.Left + (e.X - X1)
Dim NewY As Integer = Me.Top + (e.Y - Y1)
Dim W As Integer = Me.Width
Dim H As Integer = Me.Height
If NewY >= WR.Top - 15 And NewY <= WR.Top + 15 Then
Me.Top = WR.Top
ElseIf NewY + H > WR.Bottom - 15 And NewY + H < WR.Bottom + 15 Then
Me.Top = WR.Bottom - H
Else
Me.Top = NewY
End If
If NewX >= WR.Left - 15 And NewX <= WR.Left + 15 Then
Me.Left = WR.Left
ElseIf NewX + W > WR.Right - 15 And NewX + W < WR.Right + 15 Then
Me.Left = WR.Right - W
Else
Me.Left = NewX
End If
End Sub
这段代码计算了您按下左键移动鼠标时窗体的新位置,并在它靠近屏幕边缘时将其吸附。默认距离为 15,但您可以更改它,或将其替换为变量,以便在运行时动态更改它。
意义
这段代码非常易于理解,没有复杂之处。它还使用一种非常简单的方法来移动没有边框的窗体。