65.9K
CodeProject 正在变化。 阅读更多。
Home

将窗体吸附到屏幕边界的简单方法

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.10/5 (9投票s)

2007年12月20日

CPOL

1分钟阅读

viewsIcon

35139

downloadIcon

630

将无边框窗体吸附到屏幕边缘的一种简单方法。

背景

我一直在寻找一种方法,让窗体像 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,但您可以更改它,或将其替换为变量,以便在运行时动态更改它。

意义

这段代码非常易于理解,没有复杂之处。它还使用一种非常简单的方法来移动没有边框的窗体。

© . All rights reserved.