news 2026/5/7 16:35:03

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/4 22:06:06

[技术讨论] 三极管高低温特性测试

三极管控制电路是很常见的,但是设计不好的时候,也会导致电路正常的工作。比如下面两个电路,仅仅是集电极电阻不一样,也就是流过集电极的电流不一样,最后仿真的结果就会显示三极管BE的压降不相同,一个是0.77…

作者头像 李华
网站建设 2026/5/6 8:26:29

Semgrep终极指南:快速掌握跨平台静态代码分析利器

Semgrep终极指南:快速掌握跨平台静态代码分析利器 【免费下载链接】semgrep Lightweight static analysis for many languages. Find bug variants with patterns that look like source code. 项目地址: https://gitcode.com/GitHub_Trending/se/semgrep 告别…

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

LangChain RAG-MultiVector实现多向量检索文档

01. 多表征/向量索引多个维度记录信息 等同于为文档块生成 多个向量,支持的方法如下:把文档切割成更小的块:通过检索更小的块,但是查找其父类文档(ParentDocumentRetriever)。摘要:使用 LLM 为每…

作者头像 李华
网站建设 2026/5/3 2:34:30

鸿蒙PC UI控件库 - SecondaryButton 次要按钮详解

视频演示地址: 📋 目录 概述特性快速开始API 参考使用示例主题配置最佳实践常见问题总结 概述 SecondaryButton 是控件库中的次要按钮组件,适用于次要操作场景。与 PrimaryButton 的主要区别在于: PrimaryButton:实…

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

不花一分钱!2025年免费降低AI率的5个有效方法与工具指南

在论文、报告、内容创作越来越严格的时代,查AI率、检测AI率、降AI率 已经成为学生、写作者、博主的日常需求。很多同学因为 AI率过高被导师指出“AI痕迹太重”,甚至退回重写。本文今天一次性告诉你: 检测AI率应该注意什么 免费查AI率的网站有…

作者头像 李华