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

#t#VB.NET仍是比较常用的,所以我研讨了一下VB.NET拖放文件,本文介绍了在VB.NET中怎么完结承受VB.NET拖放文件,在这里拿出来和咱们共享一下,期望对咱们有用。自从资源管理器中拖放到应用程序中的时分,主动获取VB.NET拖放文件。文中的比如是一个承受VB.NET拖放文件显示文件内容的VB.NET实例程序。

高手用实例谈VB.NET拖放文件  VB.NET拖放文件 第1张

关于文本格式的文件,咱们能够直接拖到记事本中就能够看到内容;各种类型的图片,拖到Photoshop中,就能够直接对其修改。咱们怎么在VB.NET开发的程序也完结上述作用呢?

咱们知道,每一个Windows的应用程序都有一个音讯行列,程序的主体承受体系的音讯,然后分发出去(给一个form,或许一个控件),承受者有相应的程序来处理音讯。在.NET的Form中,默许状况下程序是不翻译这些音讯的,也便是说默许咱们的Class是不参加应用程序的音讯泵。能不能把咱们的Form Class参加应用程序的音讯泵呢?能够!

在.NET中,任何一个完结IMessageFilter 接口的类,能够添加到应用程序的音讯泵中,以在音讯被调度到控件或窗体之前将它挑选出来或履行其他操作。运用 Application 类中的 AddMessageFilter 办法,能够将音讯挑选器添加到应用程序的音讯泵中。

所以咱们在程序加载的时分,调用Application.AddMessageFilter(Me)。但是,默许状况下一个Form或许控件是不能承受VB.NET拖放文件的,咱们调用一个WIN32 API DragAcceptFiles,这个API能够设置对应的控件是否能承受VB.NET拖放文件。然后能够用DragQueryFile查询拖放到的文件列表,也便是VB.NET拖放文件地详细途径和文件名。

  1. ImportsSystem.Runtime.InteropServices
  2. PublicClassForm1
  3. InheritsSystem.Windows.Forms.Form
  4. ImplementsIMessageFilter
  5. 'API声明
  6. ConstWM_DROPFILES=&H233‘拖放文件音讯
  7. <DllImport("shell32.dll")>PublicSharedSubDragFinish(ByValhDropAsInteger)
  8. EndSub
  9. <DllImport("shell32.dll")>PublicSharedSubDragAcceptFiles
    (ByValhwndAsInteger,ByValfAcceptAsBoolean)
  10. EndSub
  11. <DllImort("shell32.dll")>PublicSharedFunctionDragQueryFile(ByValHDROPAsInteger,
    ByValUINTAsInteger,ByVallpStrAsSystem.Text.StringBuilder,ByValchAsInteger)AsInteger
  12. EndFunction
  13. PrivateSubForm1_Load(ByValsenderAsSystem.Object,
    ByValeAsSystem.EventArgs)HandlesMyBase.Load
  14. Application.AddMessageFilter(Me)
  15. DragAcceptFiles(TextBox1.Handle.ToInt32,True)
  16. EndSub
  17. FunctionPreFilterMessage(ByRefmAsMessage)AsBooleanImplementsIMessageFilter.PreFilterMessage
  18. Ifm.Msg=WM_DROPFILESThen
  19. '设置拖放的动作
  20. DimnfilesAsInt16
  21. nfiles=DragQueryFile(m.WParam.ToInt32,-1,Nothing,0)
  22. DimiAsInt16
  23. DimsbAsNewSystem.Text.StringBuilder(256)
  24. DimsFirstFileNameAsString'记载***个文件名
  25. TextBox1.Clear()
  26. Fori=0Tonfiles-1
  27. DragQueryFile(m.WParam.ToInt32,i,sb,256)
  28. Ifi=0ThensFirstFileName=sb.ToString
  29. TextBox1.AppendText(ControlChars.CrLf&sb.ToString)
  30. Next
  31. DragFinish(m.WParam.ToInt32)'拖放完结
  32. '显示文件内容
  33. DimfsAsNewSystem.IO.FileStream(sFirstFileName,IO.FileMode.Open)
  34. DimsrAsNewSystem.IO.StreamReader(fs,System.Text.Encoding.GetEncoding("gb2312"))
  35. TextBox1.AppendText(ControlChars.CrLf&sr.ReadToEnd().ToString)
  36. fs.Close()
  37. sr.Close()
  38. EndIf
  39. ReturnFalse
  40. EndFunction
  41. ProtectedOverloadsOverridesSubDispose(ByValdisposingAsBoolean)
  42. IfdisposingThen
  43. IfNot(componentsIsNothing)Then
  44. components.Dispose()
  45. EndIf
  46. EndIf
  47. Application.RemoveMessageFilter(Me)
  48. DragAcceptFiles(TextBox1.Handle.ToInt32,False)
  49. MyBase.Dispose(disposing)
  50. EndSub
转载请说明出处
知优网 » 高手用实例谈VB.NET拖放文件

发表评论

您需要后才能发表评论