在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控件拖拽,改变大小;整理于https://bbs.csdn.net/topics/70375905网页上hamadou(闵峰)的回复 立即下载

相关推荐

vb.net自动拖放panel

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

五分钟学会VB.NET实现拖放

五分钟学会VB.NET实现拖放 这里介绍VB.NET实现拖放,这篇文章列举了如何在窗体内、窗体之间,甚至应用程序之间移动文本、图片或者文件的例子,显示了在VB.NET实现拖放是非常容易得。 <br /> <br />VB.NET还是比较常用的,于是我研究了一下VB.NET实现拖放,在这里拿出来和大家分享一下,希望对大家有用。Windows用户一般分为两类:一类习惯用键盘操作,一类习惯用鼠标操作。程序员们在编程时一般会提供快捷键(在命令或字母中加下划线)或快捷方式(用CTRL加字母的组合)来照顾到那些习

I'm Nothing 995

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

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

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

4853

(遇到问题)(已解决)word敲入的公式转化为mathtype

https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的.

计算机视觉 1万+

内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)

DRAM,全称为 Dynamic Random Access Memory ,中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的,芯片世界里还有一种 SRAM 静态随机存取存储器的存在。笼统地说,DRAM 的结构比 SRAM 更简单,面积占用更小,适合制作大容量的存储芯片;而 SRAM 结构复杂一些,一般使用六个晶体管,面积消耗大,但是读写速度快,而且因为 SRAM 只用到晶体管,所以在工艺上和逻辑芯片相兼容,我们可以在逻辑芯片上直接集成 SRAM。

呆呆象呆呆的博客 2万+

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

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

weixin_30553777的博客 567

黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间

lz的用法是这样的,一个中古级mac mini 2011上装有vmware esxi 7.6, 然后上面挂载了lz的华芸Asustor Nas的iscsi空间,lz用的是basic volume,然后esxi上面有虚拟的黑群晖6.2.2-24922,黑群晖的docker里跑着不可描述软件,但是发现下载速度过快时,比如有好几个文件同时下载,总速度超过60MB/s以后storage manager里很...

weixin_39669629的博客 1万+

在VB.NET中实现文件拖放

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

wxx66666的专栏 1366

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3203

【Qt】解决 FTH: (11284): *** Fault tolerant heap shim applied to current process. (亲测有效)

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers。容错堆垫片应用到当前的过程。这通常是由于以前的崩溃。win + r,输入regedit。

Fanjufei的博客 830

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

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

383

基于 PID 算法的 STM32 步进电机高精度位置控制系统设计与实现(工业自动化应用)

硬件层面:选用 STM32F103C8T6+A4988 + 欧姆龙编码器的组合,兼顾工业可靠性与成本,接线需注意强弱电分离和信号抗干扰;软件层面:核心为位置式 PID 闭环控制,Mermaid 流程图清晰展现 “采集 - 运算 - 驱动” 的闭环逻辑,代码模块化易移植;性能层面:无负载定位误差≤±1 脉冲,带载误差≤±3 脉冲,满足工业自动化高精度位置控制需求。

weixin_42300449的博客 194

在VB.NET中实现拖放操作

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

chinaherolts2008的博客 920

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VB.NET的拖放操作

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

harriszhuang的专栏 530

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[VB.Net]文件拖放示例

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

tzwsoho的专栏 1082
上一篇: 基于角色的安全性(一)
下一篇: 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、付费专栏及课程。

余额充值