VB拖动picturebox里面的picture,麻烦看下程序错在哪

希望按下鼠标,图片在picturebox中允许拖放,释放鼠标停止拖放。类似我们在网上看电子地图。Dragmode也设置成0了,但运行时却只能看到一个灰色的边框在移动,松开鼠标后框就消失了。图片也没有动。下面是代码:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move (X - Source.Width / 2), (Y - Source.Height / 2)
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Drag 1
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture2.Drag 2
End Sub
麻烦各位看看代码有什么问题,帮忙改改啊。
不好意思提问的时候打错了,我程序里面改成Picture1.Drag 2的,效果一样,还是不成功。

Picture2.Drag 2
改为Picture1.Drag 2

在vB中+窗体和控件对象都有一个D~gDrop事
件,当拖动一个控件到窗体或控件上,并释放鼠标按钮,
完成拖动操作.拖动的对象上产生DragDrop事件。用此
可完成对象的拖动操作,其一般语法结构和程序代码如
下:
Sob Object—DragDrop(Source As contro1.X as Single,
YAs Single)
So utee.Move X.Y
End Sub
其中,Object代表目的对象(即拖动到其上的对象);
Source代表源对象(即被拖动的对象);X、Y代表鼠标指
针所在目标对象上的当前坐标值.用来决定源对象拖动
结束后在目标对象上的位置。
在实际应用中。仅使用上面的DragDmp事件是很难
达到控件拖动的精确定位,其主要问题有两方面,一是在
小范围(投有移出控件自身)拖动时,控件不会被拖动;二
是当大范围拖动时,拖动结束后,其定位与拖动时的灰色
显示框不符。要解决这两方面的问题,可通过下面的方
法来解决:
通过设定被拖动对象的DragMode属性.决定对象
拖动时的形状,DragMode为0(缺省值).表示人工拖动
方式,此时需要在程序中使用Drag方法来控制拖动的开
始与停止;DragM~e为1,表示自动方式。下面假设源
对象的DragMode属性为0方式。
首先,增加源对象的MouseDown事件过程,并声明
窗体级变量StartX,StarrY来记录开始拖动时的X、Y值。
程序代码如下:
SobSource—Mm~seDown(ButtonAS Integer.XAS Sin.
gle。YAs Single)‘
Source.Drag 1’开始拖动
StartX =X
startY =Y
End So b
其次,增加源对象的MouseUp事件过程来设定拖动
完成,其代码如下:
Sob So urce-MouseUp(Button As Integer,X As Single.
YAs Single)
Source Drag 2’结束拖动
End So b
最后,利用DragDmp事件来完成控件拖动的精确定
位。这里需要分别编写源对象和目的对象的DragDmp
事件来完成小范围内和大范围内拖动的精确定位,具体
代码如下:
SubSource-DragDrop(SourceAs control,X as Single.
Y AS Single)
Source.Move(x—StartX),(Y—StarrY)
E Sub
SobObject.DragDrop(SourceAS control,X asSingle,Y
As Single)
Source.Move(X—StartX).(Y—StarrY)
End Sub
按上述方法设置对象属性及事件,即可实现控件拖
动的精确定位。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-19
用Picture1.PaintPicture LoadPicture("图片名"), X, Y 重画一下。
第2个回答  2009-08-19
我不是来回答此题的 只是想与你分享一下另一个有点小白的思路
首先在窗体上放置5个PictureBox,把图片装入到Picture1,然后在代码栏中输入
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Dim blnDragging As Boolean
Dim offsetX As Single, offsetY As Single

Private Sub Form_Load()
'1
Picture1.Left = 0
Picture1.Top = 0
Picture1.AutoSize = True
'2
Picture2.Left = 0
Picture2.Top = 0
Picture2.Width = 4600
Picture2.Height = 500
'3
Picture3.Left = 0
Picture3.Top = Picture2.Height
Picture3.Width = 600
Picture3.Height = 2800
'4
Picture4.Left = Picture3.Width
Picture4.Top = Picture3.Height
Picture4.Width = Picture2.Width
Picture4.Height = Picture2.Height
'5
Picture5.Left = Picture2.Width
Picture5.Top = 0
Picture5.Width = Picture3.Width
Picture5.Height = Picture3.Height
'form
Me.BorderStyle = 0
Me.Width = Picture2.Width + Picture3.Width
Me.Height = Picture2.Height + Picture3.Height
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If blnDragging Then
Picture1.Move X - offsetX, Y - offsetY
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnDragging = False
ReleaseCapture
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
blnDragging = True
SetCapture Me.hwnd
offsetX = X
offsetY = Y
End If
End Sub
其实就是把4个PictureBox(也可以是其他控件)摆成一个遮罩层放在底图的上方,然后使底图可以随意拖动。代码中Form_Load事件里的代码是为了设置控件们的属性,可以不用代码直接在控件的属性里设置。其它的完善功能(如限制Picture1拖动范围等)我就不写了。
相似回答