对于 DragMode 属性,Visual Basic 的手动设置比自动设置提供更多控制。手动设置允许指定可以拖动控件的时间以及不可拖动控件的时间。(在将 DragMode 设置成“自动化”时,只要设置不变,就总能拖动控件。)
比如要在响应 MouseDown 和 MouseUp 事件或响应键盘命令或菜单命令时得以进行拖动。有了手动设置,还可在开始拖动前识别 MouseDown 事件,这样就可以记录鼠标的位置。
为在代码中启动拖动,应将 DragMode 保持为缺省设置 (0-Manual)。然后,无论何时开始拖动或停止拖动都请使用 Drag 方法。请用下述 Visual Basic 常数指定 Drag 参数的操作。
常数 | 值 | 意义 |
VbCancel | 0 | 取消拖动操作 |
VbBeginDrag | 1 | 开始拖动操作 |
VbEndDrag | 2 | 结束拖动操作 |
Drag 方法的语法如下:
[object.]Drag action
如果将操作设置为 vbBeginDrag,则由 Drag 方法启动控件的拖动。如果将操作
设置为 vbEndDrag,则放下控件并引发 DragDrop 事件。如果将操作
设置为 vbCancel 则取消操作。这里的效果与设置成 vbEndDrag 值的情况类似,不同之处在于不引发 DragDrop 事件。
本章前面的“放下对象时的响应”中有一示例,在此示例的基础上可对 Image1 添加 MouseDown 事件,其中,Image1 对 Drag 方法进行说明。将 Image1 的 DragMode 属性设置为 0-Manual,然后添加以下过程:
Private Sub Image1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Image1.Drag vbBeginDrag
Set Image1.DragIcon = LoadPicture("c:\Program _
files\ Microsoft Visual _
Basic\Icons\Dragdrop\Dragfldr.ico")
End Sub
将 DragOver 事件过程添加到 Image2 中,则当源进入目标时可终止拖动。在移动 Image1 经过 Image2 时,本例将关闭文件柜。
Private Sub Image2_DragOver(Source As Control, _
X As Single, Y As Single, State As Integer)
Source.Drag vbEndDrag
Source.Visible = False
Image2.Picture = LoadPicture("c:\Program _
files\Microsoft Visual _
Basic\Icons\Office\Files03a.ico")
End Sub
将第三个 Image 控件添加到窗体上则可对取消拖动操作进行演示。在本例中,Image3 的 Picture 属性包含一个垃圾桶图标。拖动文件经过 Image3 并使用 DragOver 事件与 source 参数则可取消拖动操作。
Private Sub Image3_DragOver(Source As Control, _
X As Single, Y As Single, State As Integer)
Source.Drag vbCancel
End Sub
详细信息 请参阅“语言参考”的“拖放常数”。