在VB.NET中实现文件的拖放

VB.Net程序设计:拖放WinForm数据到WinExplorer里面 优快云网友提问:直接拖动ListBox的数据到某个文件夹或桌面就实现下载?http://topic.csdn.net/u/20110719/16/c18ecef8-b71a-4a33-a83b-c9b108fade16.html 立即下载

在VB.NET中实现文件的拖放

Montaque

摘要:

       本文介绍了在VB.NET中如何实现接受拖放的文件,即从资源管理器中拖放到应用程序中的时候,自动获取拖放的文件。文中的例子是一个接受拖放文件显示文件内容的VB.NET实例程序。

引言:

       对于文本格式的文件,我们可以直接拖到记事本中就可以看到内容;各种类型的图片,拖到Photoshop中,就可以直接对其编辑。我们如何在VB.NET开发的程序也实现上述效果呢?

思路:

       我们知道,每一个Windows的应用程序都有一个消息队列,程序的主体接受系统的消息,然后分发出去(给一个form,或者一个控件),接受者有相应的程序来处理消息。在.NET的Form中,默认情况下程序是不翻译这些消息的,也就是说默认我们的Class是不加入应用程序的消息泵。能不能把我们的Form Class加入应用程序的消息泵呢?可以!

       在.NET中,任何一个实现IMessageFilter 接口的类,可以添加到应用程序的消息泵中,以在消息被调度到控件或窗体之前将它筛选出来或执行其他操作。使用 Application 类中的 AddMessageFilter 方法,可以将消息筛选器添加到应用程序的消息泵中。

       于是我们在程序加载的时候,调用Application.AddMessageFilter(Me)。然而,默认情况下一个Form或者控件是不能接受拖放的文件的,我们调用一个WIN32 API DragAcceptFiles,这个API可以设置对应的控件是否能接受拖放的文件。然后可以用DragQueryFile查询拖放到的文件列表,也就是拖放文件地具体路径和文件名。

 

代码:

Imports System.Runtime.InteropServices

Public Class Form1

    Inherits System.Windows.Forms.Form

    Implements IMessageFilter

‘ API申明

    Const WM_DROPFILES = &H233  ‘拖放文件消息

 

    <DllImport("shell32.dll")> Public Shared Sub DragFinish(ByVal hDrop As Integer)

    End Sub

    <DllImport("shell32.dll")> Public Shared Sub DragAcceptFiles(ByVal hwnd As Integer, ByVal fAccept As Boolean)

    End Sub

    <DllImport("shell32.dll")> Public Shared Function DragQueryFile(ByVal HDROP As Integer, ByVal UINT As Integer, ByVal lpStr As System.Text.StringBuilder, ByVal ch As Integer) As Integer

    End Function

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Application.AddMessageFilter(Me)

        DragAcceptFiles(TextBox1.Handle.ToInt32, True)

End Sub

  

Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage

        If m.Msg = WM_DROPFILES Then

            '设置拖放的动作

            Dim nfiles As Int16

            nfiles = DragQueryFile(m.WParam.ToInt32, -1, Nothing, 0)

            Dim i As Int16

            Dim sb As New System.Text.StringBuilder(256)

            Dim sFirstFileName As String '记录第一个文件名

 

            TextBox1.Clear()

            For i = 0 To nfiles - 1

                DragQueryFile(m.WParam.ToInt32, i, sb, 256)

                If i = 0 Then sFirstFileName = sb.ToString

                TextBox1.AppendText(ControlChars.CrLf & sb.ToString)

            Next

            DragFinish(m.WParam.ToInt32) '拖放完成

 

            '显示文件内容

            Dim fs As New System.IO.FileStream(sFirstFileName, IO.FileMode.Open)

            Dim sr As New System.IO.StreamReader(fs, System.Text.Encoding.GetEncoding("gb2312"))

            TextBox1.AppendText(ControlChars.CrLf & sr.ReadToEnd().ToString)

            fs.Close()

            sr.Close()

 

        End If

        Return False

End Function

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

        If disposing Then

            If Not (components Is Nothing) Then

                components.Dispose()

            End If

        End If

        Application.RemoveMessageFilter(Me)

        DragAcceptFiles(TextBox1.Handle.ToInt32, False)

        MyBase.Dispose(disposing)

 

   End Sub

注意:拖放结束后,调用DragFinish释放内存。

 

参考:ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemwindowsformsimessagefilterclasstopic.htm

五分钟学会VB.NET实现拖放 VB.NET还是比较常用的,于是我研究了一下VB.NET实现拖放,在这里拿出来和大家分享一下,希望对大家有用。Windows用户一般分为两类:一类习惯用键盘操作,一类习惯用鼠标操作。程序员们在编程时一般会提供快捷键(在命令或字母中加下划线)或快捷方式(用CTRL加字母的组合)来照顾到那些习惯键盘的用户,但是那些鼠标用户却被忽略了。因为程序员们一般都习惯用键盘,所以他们这种重视键盘操作的特点是可以理解的,但是每个程序员也应该考虑到提供鼠标支持。 立即下载

相关推荐

vb.net自动拖放panel

面板的自由控制,使你可以方便的使用panel实现个性面板的设计,随心设计。很好的代码案例

在VB.NET中实现拖放操作 DragDrop

绪论 用户一般分为两类:一类习惯用键盘操作,一类习惯用鼠标操作。程序员们在编程时一般会提供快捷键或快捷方式来照顾到那些习惯键盘的用户,但是那些鼠标用户却被忽略了。因为程序员们一般都习惯用键盘,所以他们这种重视键盘操作的特点是可以理解的,但是每个程序员也应该考虑到提供鼠标支持。 鼠标用户所期望的一件事就是能够在应用程序中实现拖放。如果你注意到一些大型应用程序或windows自身的话,拖放操作几乎

4853

vb.net控件拖拽,改变大小

vb.net控件拖拽,改变大小;整理于https://bbs.csdn.net/topics/70375905网页上hamadou(闵峰)的回复

【搬运】VB.NET实现文件拖放功能

你什么都不用做,直接新建一个窗体,把代码粘贴进去就行了。其实所有的标准控件都支持进行拖放操作,所以你甚至可以对一个按钮进行文件拖放。当然,一般都会使用如ListBox或TextBox控件进行拖放,可以直接打开某些文件,读取里面的数据。如果实在弄不懂,建议去多看看MSDN,虽然MSDN可能是日本友人帮我们翻译的...(^_^b) Public Class Form1 ...

weixin_30553777的博客 567

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

CATIA_V5R2019/DELMIA_V5R2019安装包下载及安装教程破解

一只机械工装熊的博客 8338

在VB.NET中实现文件拖放

               在VB.NET中实现文件拖放                            本文介绍了在VB.NET中如何实现接受拖放的文件,即从资源管理器中拖放到应用程序中的时候,自动获取拖放的文件。文中的例子是一个接受拖放文件显示文件内容的VB.NET实例程序。               对于文本格式的文件,我们可以直接拖到记事本中就可以看到内容;各种类型的图片,拖到P

wxx66666的专栏 1366

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

【VB.NET】实现拖放桌面文件到程序中的代码

你什么都不用做,直接新建一个窗体,把代码粘贴进去就行了。 其实所有的标准控件都支持进行拖放操作,所以你甚至可以对一个按钮进行文件拖放。 当然,一般都会使用如ListBox或TextBox控件进行拖放,可以直接打开某些文件,读取里面的数据。 如果实在弄不懂,建议去多看看MSDN,虽然MSDN可能是日本友人帮我们翻译的...(^_^b) Public Class Form1     Pr

383

Cursor+Apifox MCP Server实战:5分钟搞定API自动化测试用例生成

本文详细介绍了如何利用Cursor IDE与Apifox MCP Server,在5分钟内将API文档自动转化为高质量的自动化测试用例。通过配置MCP Server建立数据桥梁,开发者可直接用自然语言指令,让AI基于真实接口规范生成可立即执行的pytest测试代码,大幅提升接口测试效率,特别适合快节奏的SaaS项目。

ooo22的博客 533

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 646

在VB.NET中实现拖放操作

在VB.NET中实现拖放操作   绪论   Windows用户一般分为两类:一类习惯用键盘操作,一类习惯用鼠标操作。程序员们在编程时一般会提供快捷键(在命令或字母中加下划线)或快捷方式(用CTRL加字母的组合)来照顾到那些习惯键盘的用户,但是那些鼠标用户却被忽略了。因为程序员们一般都习惯用键盘,所以他们这种重视键盘操作的特点是可以理解的,但是每个程序员也应该考虑到提供鼠标支持。 鼠标用户所期望的一件事就是能够在应用程序中实现拖放。如果你注意到一些大型应用程序或windows自身的话,拖放操作几乎随处可见。例

chinaherolts2008的博客 920

RK3568/RK3588 + YT 9215交换机芯片,MAC TO MAC 调试记录

原来的方案是rk3568 gmac 直接接phy,phy 接 switch 芯片,只是把交换芯片当交换用,驱动方面基本不用开发,但是要做vlan 那么必须涉及交换芯片的开发。选择裕太微有两个方面的原因:1.国产化替代2.可获得原厂技术支持3.目前已经完成 两个gmac 口交换芯片的配置,实现vlan,内部交换,两个光口可正常通信。

Nyiragongo的博客 1万+

VB.NET的拖放操作

如代码. 暂时还没改成类的写法. Public Class Form1 Private Sub Init_DragDrop() Me.AllowDrop = True AddHandler Me.DragEnter, AddressOf Obj_DragEnter AddHandler Me.DragDrop, AddressO

harriszhuang的专栏 530

58子站安居,经纪人营销管理平台登录接口加密逆向

实战场景password 实战分析 本次要解决的站点依旧来源自78技术人社群,有朋友希望再次说明一下其登录模块的加密参数寻找与逆向逻辑,本文我们就一起分析一下。 站点地址为:vip.anjuke.com/portal/login 通过开发者工具,可以简简单单的寻找到相应的数据。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 2万+

【Conda虚拟环境】新建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入 + 更改

(1)创建虚拟环境(2)激活虚拟环境(4)查看虚拟环境(3)退出虚拟环境(5)删除虚拟环境(6)复制虚拟环境(7)导出虚拟环境(8)导入虚拟环境(9)更改虚拟环境的安装路径(10)在指定路径下,配置虚拟环境

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 4万+

VB.NET笔记 实现文件拖拽到窗体

Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System. EventArgs) Handles MyBase.Load Me. AllowDrop = True End Sub ''建拖曳事件,实现文件拖放 Private Sub Form1_DragEnter( ByVal sender As...

chinaherolts2008的博客 575

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[VB.Net]文件拖放示例

<br />很简单的代码。。。仅为做个记号。。。高手路过请回。。。<br />画一个ListView1,添加如下代码:<br /> <br />'**************************************************************** '文件拖放操作 '作者:TZWSOHO '欢迎访问我的博客:http://blog.csdn.net/tzwsoho '******************************************************

tzwsoho的专栏 1082

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 基于角色的安全性(一)
下一篇: Type-Safety in .NET Security
Montaque
博客等级 码龄26年 63粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值