VB.net学习(二):拖动无边框窗体

代码内容摘自他处,并做简单修改、解释和备注。

Public Class Floating
    Private blnDragging As Boolean = False
    Private OriginalLocation As Point
    Private MoveToPoint As Point

    Private Sub ToolStrip1_MouseDown(sender As Object, e As MouseEventArgs) Handles ToolStrip1.MouseDown
        Me.blnDragging = True
        Me.OriginalLocation = New Point(e.X, e.Y)   '获取鼠标按下后在窗体上的位置坐标
    End Sub

    Private Sub ToolStrip1_MouseUp(sender As Object, e As MouseEventArgs) Handles ToolStrip1.MouseUp
        Me.blnDragging = False
    End Sub

    Private Sub ToolStrip1_MouseMove(sender As Object, e As MouseEventArgs) Handles ToolStrip1.MouseMove
        If Me.blnDragging Then

            ''方法一:
            'Me.MoveToPoint = New Point(e.X, e.Y)   '鼠标移动后在窗体上的坐标
            'Me.Location = Me.PointToScreen(Me.MoveToPoint) - Me.OriginalLocation

            '方法二:
            Me.MoveToPoint = Me.PointToScreen(New Point(e.X, e.Y))  '获取鼠标相对于屏幕的位置坐标
            Me.MoveToPoint.Offset(Me.OriginalLocation.X * -1, Me.OriginalLocation.Y * -1)
            Me.Location = Me.MoveToPoint
            'Offset算法:
            'objPoint = New Point(a,b)
            'objPoint.Offset(x,y)
            'objPoint.X = a + x,objPoint.Y = b + y

        End If
    End Sub

    Private Sub ToolStrip1_MouseLeave(sender As Object, e As EventArgs) Handles ToolStrip1.MouseLeave
        Me.blnDragging = False
    End Sub

End Class
在代码末尾我加了鼠标的离开事件的代码。因为调试时发现鼠标移动过快的话会跳出窗体,这时blnDragging仍旧是True,鼠标在未按下的状态下,下一次进入控件会使窗体跟着移动。
方法一和方法二只是方式不同,都可以算出鼠标移动后的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值