`
zht1933
  • 浏览: 223526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

vb.net 拖拽文件

阅读更多

本文介绍了在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

分享到:
评论

相关推荐

    如何实现进度条-VB.net_vb.net_

    - `Form1.vb`:窗体的VB.NET源代码文件。 - `AssemblyInfo.vb`:程序集信息文件,包含版本、版权等元数据。 - `进度条.vbproj`:项目文件,定义了项目的构建设置。 - `BIN`:可能是一个文件夹,用于存放编译后的...

    vb.net编写的记事本

    这个项目展示了如何利用VB.NET的基本控件和功能来创建一个具有基础功能的记事本程序,比如文本编辑、文件操作以及用户界面的自定义。 在VB.NET中,开发者可以利用Windows Forms库来构建图形用户界面(GUI)。在这个...

    VB.NET扩展源码大全.zip

    这可能是包含自定义VB.NET类或模块的源代码文件。"神扩展"可能表示这是对.NET Framework的某些部分进行了增强或扩展的代码,提供了额外的功能或优化。 4. **图形图像.vb**: 这个源文件很可能包含了处理图形和...

    用VB.NET和VC.NET开发交互式CAD系统(源码).

    5. **事件处理**:VB.NET的事件驱动编程模型使得响应用户操作(如点击、拖动)变得简单,从而实现交互性。 6. **数据存储和交换**:设计合理的数据结构来保存设计信息,并考虑与其它CAD格式(如DWG、DXF)的导入...

    曲线显示 vb.net 控件dll

    5. **事件处理**:VB.NET控件通常有丰富的事件系统,比如鼠标点击、拖动等,这些事件可以被用来实现交互式功能,如平移、缩放曲线视图。 6. **性能优化**:对于大量数据的曲线显示,性能优化是关键。VB.NET提供了...

    VB.NET 简单图片浏览器

    【VB.NET 简单图片浏览器】是一款基于Visual Basic .NET开发的轻量级应用程序,专为用户提供了方便快捷的...通过学习这个项目,开发者可以深入理解VB.NET中的图形用户界面设计、文件操作以及事件驱动编程等核心概念。

    我的第一个VB.NET程序,附源代码

    通过阅读和分析“Form1.vb”和“Form1.Designer.vb”的源代码,初学者可以了解到VB.NET如何创建窗体,添加控件,以及实现拖动窗口的效果。这为学习VB.NET的基础语法、窗体设计和事件处理提供了一个实际的案例。

    VB.NET 视频教程(200集 英文版)

    在使用VB.NET进行Windows应用程序开发时,可以通过拖拽方式来添加各种控件,然后编写相应的事件处理代码。 ### 六、网络编程 网络编程是指利用计算机网络进行通信的过程。在VB.NET中,可以使用Socket类库来进行...

    vb.net 连接三菱控件

    首先,安装GX Works2并获取SDK,然后在VB.NET项目中导入相关的DLL文件。接着,创建对象实例,设置PLC的IP地址、站号等参数,调用SDK中的方法进行数据读写。例如,使用`Melsec.FX1N.Net.Cls`类可以实现FX系列PLC的...

    VB.NET音乐播放器

    综上所述,VB.NET音乐播放器的开发涉及到了多媒体处理、用户界面设计、事件驱动编程、多线程、文件操作、播放列表管理、状态保存和错误处理等多个方面,是一个综合性的实践项目,有助于提升开发者在VB.NET环境下的...

    vb.NET写的扑克牌游戏

    【vb.NET写的扑克牌游戏】是一款使用VB.NET编程语言开发的桌面应用程序,它展示了VB.NET在游戏开发领域的应用。这个游戏的源代码可供学习者研究,了解如何利用VB.NET实现游戏逻辑、用户界面以及与用户的交互。 VB...

    VB.NET实现网络拓朴图

    【VB.NET实现网络拓朴图】是一个...综上所述,"VB.NET实现网络拓朴图"项目涵盖了从图形用户界面设计、数据库交互、文件操作到复杂算法实现等多个方面的VB.NET编程知识,展示了VB.NET在开发实用应用程序中的强大能力。

    vb 实现文件拖拽显示文件路径

    在VB(Visual Basic)编程环境中,实现文件拖拽并显示文件路径是一项常见的功能,尤其在设计用户界面时,能够提高用户的交互体验。本教程将详细解释如何通过VB来实现这一功能。 首先,我们需要理解VB中的DragDrop...

    vb.net记事本小程序

    1. **界面设计**:VB.NET使用Windows Forms作为用户界面,我们可以从工具箱拖拽控件到表单上,如菜单Strip、TextBox、Button等。在本例中,我们将创建一个菜单栏,包含"打开"、"保存"、"关闭"等菜单项,并在主窗体中...

    vb.net无边框+靠边隐藏窗体模板【源码】.rar

    为源码项目文件,解压缩点击“无边框靠边隐藏窗体模板【源码】.vbproj”文件即可测试! 1.内容1:无边框可拖动窗口,...vb.net frameworke4.52 x86 4.因为自己做的是32位软件,预设是32位,可以直接自己改成any cpu

    vb.net 模拟象棋

    - 编译成可执行文件:完成开发后,通过vb.net的编译功能将程序打包成.exe文件,以便在没有开发环境的机器上运行。 - 部署与安装:创建安装包,方便用户下载安装,可能需要考虑版本管理、依赖库的处理等。 通过...

    VB.NET 拼图游戏(完整版)

    【VB.NET 拼图游戏(完整版)】 VB.NET是一种基于.NET框架的编程语言,由微软开发,常用于创建Windows桌面应用程序。本项目“VB.NET 拼图游戏”是一个利用VB.NET编写的交互式游戏,旨在提供一个有趣的学习平台,让...

    VB.NET_ArcMap.zip_VB.net gis

    这个压缩包包含了一个PDF文件,可能是一个教程或者指南,详细介绍了如何利用VB.NET进行ArcMap的扩展和定制。 在GIS领域,VB.NET是一种常见的编程语言,因为它的易用性和与.NET Framework的紧密集成。.NET Framework...

Global site tag (gtag.js) - Google Analytics