news 2026/7/14 11:43:50

Visual Basic 拖放

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 图片拖动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 23:22:51

基于Java的安全检查巡视智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全检查巡视智慧管理系统将会员管理、设备管理、车辆管理和各类巡检任务关联起来,提供全面的分析和报告功能。该系统区别于传统的“烂大街”选题,在技术创新性和实用性方面具有明显优势:通过智能化的数据…

作者头像 李华
网站建设 2026/7/13 2:41:53

基于Java的安全生产指标智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产指标智慧管理系统的主要功能模块覆盖了从会员管理到安全事故管理等各个方面,全面涵盖了人员、设备及安全检查等多个维度。该系统通过会员角色管理和权限控制确保不同用户能够进行相应的操作;组织机构和岗位的…

作者头像 李华
网站建设 2026/7/13 3:59:22

基于Java的安全生产水利工程智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产水利工程智慧管理系统的设计与实现,摆脱了传统“烂大街”选题的窠臼。该系统主要功能模块涵盖人员管理、设备管理及任务分配等多个方面,在提高工作效率的同时保证生产安全。普通员工和部门领导的角色分工明确…

作者头像 李华
网站建设 2026/7/14 5:15:52

极客时间-DeepSeek应用开发实战

吃透 MoE 架构:DeepSeek 应用开发实战,从模型特性到项目部署 引言:MoE 时代的技术新边界 MoE(混合专家模型)架构正在重塑大语言模型的应用生态。当 GPT-4 揭开 MoE 的神秘面纱,DeepSeek 等国产 MoE 模型的…

作者头像 李华
网站建设 2026/7/10 15:11:03

Vue.Draggable高效拖拽排序实战指南:5分钟掌握核心用法

Vue.Draggable高效拖拽排序实战指南:5分钟掌握核心用法 【免费下载链接】Vue.Draggable 项目地址: https://gitcode.com/gh_mirrors/vue/Vue.Draggable Vue.Draggable是Vue.js生态中最受欢迎的拖拽组件库,它基于强大的Sortable.js构建&#xff0…

作者头像 李华