彩虹哥cf租号:关于vb中控件拖动的问题?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 14:13:19
问一个控件拖动的问题。
Dim oldX As Single, oldY As Single

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

Source.Move Left + X - oldX, Top + Y - oldY

End Sub

Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
oldX = X + Left
oldY = Y + Top
Frame1.Drag 1

End Sub

Private Sub Frame1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

'在控件的 MouseDown 里记下鼠标位置(mX,mY),在MouseMove里写:
If Button = vbLeftButton Then
' Frame1.Move Frame1.Left + X - oldX, Frame1.Top + Y - oldX
End If

End Sub

利用上面这段代码可是实现frame1在form1上的拖动,但是,如果我再在窗体上加上一个frame2或其他的控件,这样我拖动frame1到frame2的时候,就不会出现我想要的结果,就是frame1停在frame2上,而是跳到了一个不知道的什么地方。
各位给各解决办法。

这是因为Frame控件也是一个容器,从Frame2外进入Frame2内,相当于从一个坐标系进入了另一个坐标系。再未进入Frame2时,Frame1的位置是相对于它所在的窗体(确切的说是该窗体的左上角坐标(0,0))确定的,一旦进入Frame2,Frame1的位置就相对于Frame2的左上角坐标(0,0)确定。

你可以在设计时作个试验,窗体上放一个Frame控件和一个按钮控件,按钮控件在Frame控件外面的时候的坐标设定为一个值(如90,90),当你把该按钮放到Frame控件上的时候,同样设定这个坐标值,你看看什么效果。