在人机互动中,或多或少需要实现控件的移动.
如果通过最有效的方法来实现控件移动.而不干扰其他事件的影响.
有2种方法实现控件移动.
1\MouseMove 在控件上移动鼠标时.
在昨天之前我一直使用这种方法,
最大的优势是拖拽控件,能实时显示.
但有我的代码有很大的弊端.会影响到其他事件的正常运行.
附代码:
1、全局变量:
kg,sbx,sby as integer
2、内部函数
1.移动控件开关
Vars("kg")=Args(0)
Vars("sbx")=Args(1)
Vars("sby")=Args(2)
2.移动位置
with Forms(Args(0)).Controls(Args(1))
if Vars("kg")=1 then
.left=.left + Args(2) - Vars("sbx")
.top=.top + Args(3) - Vars("sby")
else
end if
end with
3、窗口事件
1、MouseDown
if 选中控件符合条件 then Functions.Execute("移动控件开关",1,e.x,e.y)
2、MouseMove
if 选中控件符合条件 and Vars("kg")=1 then
Functions.Execute("移动位置",e.Form.name,e.Sender.name,e.x,e.y)
else
end if
3、MouseUp
if 选中控件符合条件 then
Functions.Execute("移动控件开关",0,0,0)
else
end if
2\MouseUp 松开鼠标后
这种方法,在松开鼠标后,才执行控件移动.
附代码:
一.全局代码
Public ydname As String '控件名称
Public ydax As Integer '控件按下X坐标
Public yday As Integer '控件按下Y坐标
Public ydx As Integer '控件移动X坐标
Public ydy As Integer '控件移动Y坐标
Public ydh As Integer '控件高
Public ydw As Integer '控件宽
二.内部函数
新移动控件
ydname=Args(0)
ydx=Args(1)
ydy=Args(2)
ydh=Args(3)
ydw=Args(4)
三.窗口事件
1.MouseDown
ydax=e.x '控件按下X坐标
yday=e.y '控件按下Y坐标
2.MouseMove
Functions.Execute("新移动控件",e.Sender.name,e.x,e.y,e.Sender.Height,e.sender.Width)
3.MouseUp
e.sender.top=e.sender.top+ydy-yday
e.sender.left=e.sender.left+ydx-ydax
[此贴子已经被作者于2010-6-7 14:55:23编辑过]