我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
先展示下效果:
![3fecd552d36b1db21deae72e4f46e183.gif](https://i-blog.csdnimg.cn/blog_migrate/401238cc397e1ba85f74eca2a9f7e8ed.gif)
上图中是在一个名字为UseForm1的窗体中插入了两个命令按钮,运行窗体后,鼠标置于窗体上,按下左键,可以移动窗体,按下右键可以移动窗体中的两个控件。
一般情况下,按下鼠标左键都可以移动窗体,但是按下鼠标右键能移动控件吗?
当然不行。
想要实现上面的效果,需要首先利用窗体的
MouseDown
事件,获取到按下鼠标时,鼠标和控件当前的位置,然后利用
MouseMove
事件,计算出窗体或者是控件移动后的位置,全部代码如下:
双击窗体后在写在窗体的事件代码中:
Dim MouseX#, MouseY#, Commandbutton1X#, Commandbutton1Y#, Commandbutton2X#, Commandbutton2Y#
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
MouseX = X
MouseY = Y
Commandbutton1X = CommandButton1.Left
Commandbutton1Y = CommandButton1.Top
Commandbutton2X = CommandButton2.Left
Commandbutton2Y = CommandButton2.Top
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
Me.Left = Me.Left + (X - MouseX)
Me.Top = Me.Top + (Y - MouseY)
ElseIf Button = 2 Then
CommandButton1.Left = Commandbutton1X + (X - MouseX)
CommandButton1.Top = Commandbutton1Y + (Y - MouseY)
CommandButton2.Left = Commandbutton2X + (X - MouseX)
CommandButton2.Top = Commandbutton2Y + (Y - MouseY)
End If
End Sub
首先声明一些公共变量,因为两个事件过程都要用到这些变量,这些变量的作用是记录按下鼠标时窗体和控件的位置。
当按下鼠标时,记录下窗体当前的位置:
MouseX = X
MouseY = Y
X、Y代表鼠标的当前坐标
同时也要记下两个控件的当前位置:
Commandbutton1X = CommandButton1.Left
Commandbutton1Y = CommandButton1.Top
Commandbutton2X = CommandButton2.Left
Commandbutton2Y = CommandButton2.Top
当移动鼠标时会触发窗体的MouseMove事件,然后利用一个If语句判断
按下的键是左键还是右键,如果按下的是左键,那就修正窗体的位置,如果按下的是右键,那就修正控件的位置。
用现在的位置(Top、Left)减去原来记录下来的位置(Top、Left)就是移动的距离,加原来所在的位置(Top、Left)就能得到新的位置(Top、Left)。
这里重点介绍下两个事件中四个参数的含义:
1、Button
,表示按下的是哪个键,下面是该参数的返回值以及含义说明。
2、Shift
,表示用户是否按下了Alt、Shift或者是Ctrl 这个三个键,下面是该参数的返回值以及含义说明。
3、X、Y,
分别代表鼠标指针的X和Y坐标值。
知识点:
窗体中的MouseDown事件和MouseMove事件
想系统学习VBA,请点击阅原文进入米宏office云学堂学习,不懂的可以提问哦!
公众号后台资源库可获取更多资源:
![e17eba13179137de25d14c87a2ae7066.png](https://i-blog.csdnimg.cn/blog_migrate/d863297c966d09667c2b240295604733.jpeg)
本节的分享就到这里,祝大家每天都有进步。
1
在线课堂在逐渐完善中,欢迎您的光临!
![fd4e7adc9b27fbfef3afb2f57f183201.png](https://i-blog.csdnimg.cn/blog_migrate/b6a6ac1c42e5f4566ee4538a631f436e.png)
![bb4d5f11b1ebeb3483905a2ae373fd03.gif](https://i-blog.csdnimg.cn/blog_migrate/2cb10ac24b9079619e83a9d2aa63b6c1.gif)
点击下方“”即可进入云课堂学习!