VB.net 在窗体中拖动控件

模块代码:

Module OperateControls
 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As String) As Int32
    Public Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Boolean
    Public Const WM_SYSCOMMAND = &H112
    Public Const SC_MOVE = &HF010&
    Public Const HTCAPTION = 2
End Module

应用示范:将下面的控件改成要设置的控件名

    Private Sub GroupBox3_MouseDown(sender As Object, e As MouseEventArgs) Handles GroupBox3.MouseDown
        ''在窗体内自由移动panel控件
        GroupBox3.BringToFront() ''此句必须放在前面,这样才能按下后第一时间出现在前面
        ReleaseCapture()
        SendMessage(GroupBox3.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
    End Sub
 

注明:模块的代码来自网络;窗体代码的注释是运行过程中发现的问题标注上去。

ReleaseCapture 函数是一个 Windows API 函数,用于释放当前窗口或控件的鼠标捕获。鼠标捕获是指在特定情况下,使某个窗口或控件成为鼠标事件的唯一接收者,即使鼠标移动到其他窗口或控件上也不会改变。通常,在使用 SetCapture 函数设置鼠标捕获后,需要使用 ReleaseCapture 函数来释放捕获。

问题:设置了MouseDown事件后这个控件的单击和双击都会失效。因为它会首先响应MouseDown事件,测试好像连MouseUp事件也失效。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值