vb中怎样让控件移动到窗体边上后自动返回
展开全部
为了方便使用,已经封装为一个过程
演示:Timer1 水平移动Picture1,每个单位4像素
Private Sub Timer1_Timer()
ControlMove Me.Picture1, 15 * 4, 0 '15*4的这个参数为Twip单位
End Sub
注意:竖直移动为ControlMove ..., ..., 1
以下过程仅能移动一个控件,这个只是演示用。如果要举一反三请自己研究下面的那个过程,然后推而广之。(只能移动一个控件的原因是仅仅为一个控件储存了向什么方向移动的参数[是正过去还是倒过来返回])
以下为需要的过程
Sub ControlMove(Control As Control, MoveStep As Long, MoveDirection As Long)
Static dirxd As Long, diryd As Long
If dirxd = 0 Then dirxd = 1: diryd = 1
Dim w As Long, h As Long
w = Control.Parent.Width: h = Control.Parent.Height
If MoveDirection = 0 Then
If dirxd = 1 Then
If Control.Left + Control.Width + MoveStep < w Then
Control.Left = Control.Left + MoveStep
Else
Control.Left = w - Control.Width
dirxd = -1
End If
Else
If Control.Left - MoveStep > 0 Then
Control.Left = Control.Left - MoveStep
Else
Control.Left = 0
dirxd = 1
End If
End If
Else
If diryd = 1 Then
If Control.Top + Control.Height + MoveStep < h Then
Control.Top = Control.Top + MoveStep
Else
Control.Top = h - Control.Height
diryd = -1
End If
Else
If Control.Top - MoveStep > 0 Then
Control.Top = Control.Top - MoveStep
Else
diryd = 1
End If
End If
End If
End Sub
演示:Timer1 水平移动Picture1,每个单位4像素
Private Sub Timer1_Timer()
ControlMove Me.Picture1, 15 * 4, 0 '15*4的这个参数为Twip单位
End Sub
注意:竖直移动为ControlMove ..., ..., 1
以下过程仅能移动一个控件,这个只是演示用。如果要举一反三请自己研究下面的那个过程,然后推而广之。(只能移动一个控件的原因是仅仅为一个控件储存了向什么方向移动的参数[是正过去还是倒过来返回])
以下为需要的过程
Sub ControlMove(Control As Control, MoveStep As Long, MoveDirection As Long)
Static dirxd As Long, diryd As Long
If dirxd = 0 Then dirxd = 1: diryd = 1
Dim w As Long, h As Long
w = Control.Parent.Width: h = Control.Parent.Height
If MoveDirection = 0 Then
If dirxd = 1 Then
If Control.Left + Control.Width + MoveStep < w Then
Control.Left = Control.Left + MoveStep
Else
Control.Left = w - Control.Width
dirxd = -1
End If
Else
If Control.Left - MoveStep > 0 Then
Control.Left = Control.Left - MoveStep
Else
Control.Left = 0
dirxd = 1
End If
End If
Else
If diryd = 1 Then
If Control.Top + Control.Height + MoveStep < h Then
Control.Top = Control.Top + MoveStep
Else
Control.Top = h - Control.Height
diryd = -1
End If
Else
If Control.Top - MoveStep > 0 Then
Control.Top = Control.Top - MoveStep
Else
diryd = 1
End If
End If
End If
End Sub
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-06-19
展开全部
去找一本教材看看吧
应该是设置step为1 和 -1
当超出边界的时候改step为-1
应该是设置step为1 和 -1
当超出边界的时候改step为-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询