news 2026/5/1 5:25:25

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/5/1 5:24:36

【Dify专栏】Dify使用方式与本地部署

关于Dify的使用,今天介绍几种主流的使用方式与本地部署的具体教程 主流使用方式 方式一:使用官方提供的云服务(比较推荐) 不需要折腾配置,并且提供一定的免费功能使用,但是需要注意的是官方免费版本可创建的…

作者头像 李华
网站建设 2026/4/25 14:23:51

线程和序列化流以及压缩流

线程的创建方式 Java 中创建线程有 3 种核心方式: 继承Thread类 实现Runnable接口 实现Callable接口 线程的几种状态: Java 线程有 6 种状态(定义在Thread.State枚举中): NEW:线程已创建但未调用start()。 …

作者头像 李华
网站建设 2026/4/24 11:45:13

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

1. 为什么这个毕设项目值得你 pick ?毕设小白的福音!基于Java的安全生产执法监管智慧管理系统的设计与实现。该系统主要功能模块包括企业管理、生产设施管理、员工培训管理等九个方面,创新性地采用了SpringMVC开发框架和MySQL数据库进行高效率的数据管理…

作者头像 李华
网站建设 2026/4/28 20:19:41

如何快速掌握text-generation-webui:大模型本地部署终极指南

如何快速掌握text-generation-webui:大模型本地部署终极指南 【免费下载链接】text-generation-webui A Gradio web UI for Large Language Models. Supports transformers, GPTQ, AWQ, EXL2, llama.cpp (GGUF), Llama models. 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/4/29 11:44:42

OpenVoice语音修复实战:从噪音干扰到完美还原的完整指南

OpenVoice语音修复实战:从噪音干扰到完美还原的完整指南 【免费下载链接】OpenVoice 项目是MyShell AI开源的即时语音克隆技术OpenVoice,旨在提供一种能够快速从少量语音样本中准确复制人类声音特征,并实现多种语言及语音风格转换的解决方案。…

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

Florence-2-large-ft:零代码实现多任务视觉AI的完整指南

Florence-2-large-ft:零代码实现多任务视觉AI的完整指南 【免费下载链接】Florence-2-large-ft 项目地址: https://ai.gitcode.com/hf_mirrors/microsoft/Florence-2-large-ft 还在为复杂的视觉AI开发而头疼吗?Florence-2-large-ft模型让这一切变…

作者头像 李华