news 2026/4/22 20:47:04

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/4/23 9:52:13

XGW-9000系列高端新能源电站边缘网关软件架构设计

XGW-9000 系列高端新能源电站边缘网关作为新能源电站智能化的核心设备,承担着 “采集 - 计算 - 控制 - 协同” 一体化功能。该产品定位于解决新能源场站设备协议异构、数据实时性差、网络可靠性低、智能调度难的核心痛点,服务于电站运营商、EPC 工程总承…

作者头像 李华
网站建设 2026/4/23 11:19:49

当你的产品万事俱备,却卡在“让用户知道”这一步

凌晨三点,你的代码刚刚跑通最后一个测试用例,产品DEMO完美无瑕。然而,比技术难题更让你失眠的,是另一个灵魂拷问:“如何让第一批真实用户涌进来?”这不是你一个人的困境。研究表明,超过60%的互联…

作者头像 李华
网站建设 2026/4/23 9:52:55

终极API流式响应优化指南:实现毫秒级实时数据处理

终极API流式响应优化指南:实现毫秒级实时数据处理 【免费下载链接】one-api OpenAI 接口管理&分发系统,支持 Azure、Anthropic Claude、Google PaLM 2、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可…

作者头像 李华
网站建设 2026/4/23 9:53:44

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

1. 为什么这个毕设项目值得你 pick ?安全生产培训认证智慧管理系统整合了多种功能模块,包括会员管理、培训计划与资源管理、考试及证书处理等。该系统不仅优化了传统模式下的繁琐操作流程,提高了工作效率和数据准确性,还引入智能分析工具辅助…

作者头像 李华
网站建设 2026/4/23 11:17:10

5步搞定Reddit视频批量制作:告别手动操作的终极效率指南

5步搞定Reddit视频批量制作:告别手动操作的终极效率指南 【免费下载链接】RedditVideoMakerBot Create Reddit Videos with just✨ one command ✨ 项目地址: https://gitcode.com/GitHub_Trending/re/RedditVideoMakerBot 还在为每天手动制作Reddit视频而头…

作者头像 李华
网站建设 2026/4/23 11:20:33

单目深度估计方法: 理论与实战视频课

高薪计算机视觉进阶指南:单双目视觉深度估计一站式通关 引言:深度估计——开启三维视觉世界的钥匙 在计算机视觉的黄金赛道上,深度估计技术正成为高薪岗位的核心竞争力。从自动驾驶的精准感知到AR/VR的沉浸体验,再到工业检测的毫…

作者头像 李华