Visual Basic 拖放

在设计模式下,各控件都可用鼠标随意拖放的方式来改变控件的大小与位置。Visual Basic的拖放功能使用户在程序运行时也具有这种能力。拖放是指运行时将控件拖到新的位置,包括两个操作:拖动和放下。拖动是按下鼠标键并移动控件,而放下是指释放鼠标键。拖放涉及被拖动的对象,即源对象和将要放在其上的目标对象。

拖放操作分为自动方式和手工方式,这由源对象的DragMode属性值决定。DragMode属性值默认为0,即手工方式,这时可以用手工方式来确定拖放操作何时开始或结束;属性值为1时为自动方式,这时控件不能正常响应鼠标事件。另外,通过DragIcon属性还可以设置拖动操作时显示的图标,默认为将源对象的灰色轮廓作为拖动的图标,也可设置为.ico图标文件。

确定手工拖动操作的方法为Drag方法,其格式为:

对象.Drag [动作]

其中,动作用于确定是启动、停止或取消手工拖动操作。0为取消手工拖动,1为启动拖动,2为停止拖动。启动手工拖动的代码通常放在源对象的MouseDown事件中,例如,可在窗体上添加一个命令按钮Command1,然后在Command1_MouseDown事件过程输入:

Command1.Drag 1

在Command1_MouseUp事件过程中输入:

Command1.Drag 2

程序运行时,只要用鼠标左键按住按钮Command1,就能产生拖放效果。如果将按钮Command1的DragMode属性值设为1,而不使用Drag方法,同样具有拖放效果。

不管是运用Drag方法或是设置DragMode属性值的方式,按下鼠标左键虽然会产生拖放效果,但每当松开鼠标左键,控件仍然留在原位置上,要想将控件拖放到别的位置,则必须用DragDrop事件。

DragDrop事件是当一个完整的拖放动作完成时触发(将一个控件拖动到一个对象上,并释放鼠标按钮),或使用Drag方法并将其动作参数设置为2时触发。DragDrop事件可用来控制在拖动操作完成时将会发生的情况,其语法格式为:

Private Sub 对象_DragDrop(Source As Control, X As Single, Y As Single)

其中,Source指正在被拖动的控件,X,Y是鼠标在目标对象中的坐标值,通常用目标坐标系统来表示。例如,若将按钮Command1拖放到指定的位置,可在Form_DragDrop事件过程中输入下列代码:

Source.Move X - Command1.Width / 2, Y - Command1.Height / 2

拖放操作的另一重要事是DragOver事件,它是当拖放操作正在进行时发生,格式为:

Private Sub 对象_DragOver(Source As Control, X As Single, Y As Single, State As Integer)

其中,State参数表示控件的转变状态,0为进入,指拖动正在进入目标对象内;1为离去,指拖动正离开目标对象;2为跨越,指拖动正经过目标对象。

DragOver事件可对鼠标在目标对象上进入、离开或停顿等进行监控,通常用于确定在拖动开始后和控件放在目标上之前发生些什么。例如,通过加亮目标(设置BackColor或ForceColor属性)监视源对象经过路径。

【例8.6】 使用Drag方法将一个图形文件(.bmp,.ico,.wmf)的文件名拖到图片框中,然后显示该图片。

在窗体上添加一个驱动器列表框(Drive1)、一个目录列表框(Dir1)、一个文件列表框(File1)、一个图片框(Picture1)、两个标签,其中Label2用于在拖动文件时显示文件被拖动的轨迹,其Visible属性设为False。为了在文件列表框内只显示图形文件,可将File1的Pattern属性设置为"*.bmp;*.wmf;*.ico"。

编写Dir1,Drive1的Change事件代码:

Private Sub Dir1_Change()

File1.Path = Dir1.Path

End Sub

Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive

End Sub

在File1按下鼠标代码:

Private Sub File1_MouseDown(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

Xd = TextHeight("A")

Label2.Move File1.Left, File1.Top + Y - Xd / 2, File1.Width, Xd

Label2.Drag 1

End Sub

当拖动进入Dir1,Drive1控件及窗体时,鼠标指针为禁止形状,当拖动离开时,鼠标指针为系统默认。Dir1,Drive1和Form的DragOver事件代码可以完全相同:

Private Sub Dir1_DragOver(Source As Control, X As Single, _

Y As Single, State As Integer)

If State = 0 Then Source.MousePointer = 12

If State = 1 Then Source.MousePointer = 0

End Sub

将拖动的图形装载到图片框的代码:

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

Picture1.Picture = LoadPicture(File1.Path + "\" + File1.FileName)

End Sub

运行时将一个文件拖动到图片框,当未释放鼠标时的界面如图8.21所示。

图8.21 图片拖动

相关推荐
天庭鸡腿哥12 分钟前
大小不足1M,干翻Windows!
microsoft·macos·visual studio·everything
AC赳赳老秦44 分钟前
政务数据处理:DeepSeek 适配国产化环境的统计分析与报告生成
开发语言·hadoop·spring boot·postgresql·测试用例·政务·deepseek
xlxxy_1 小时前
abap 批量创建供应商
运维·开发语言·sap·abap·pp·mm
独自破碎E1 小时前
Java是怎么实现跨平台的?
java·开发语言
墨有6662 小时前
C++ string 部分功能详解:迭代器、初始化与常用函数
开发语言·c++
Evand J2 小时前
【MATLAB例程】三维环境下,EKF融合INS与DVL的核心程序,用于惯导和速度传感器的数据融合滤波。附下载链接
开发语言·matlab
枫叶丹42 小时前
【Qt开发】Qt系统(二)-> 事件分发器
c语言·开发语言·数据库·c++·qt·系统架构
独自破碎E2 小时前
Leetcode1438绝对值不超过限制的最长连续子数组
java·开发语言·算法
澜莲花2 小时前
python图色之opencv基础---验证码实战
开发语言·python·opencv
沐知全栈开发2 小时前
Numpy 数组操作
开发语言