读书人

vb调用getopenfilename打开多文件的有

发布时间: 2012-01-12 22:11:58 作者: rapoo

vb调用getopenfilename打开多文件的问题

VB code
Option Explicit          Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _     "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long          Private Type OPENFILENAME     lStructSize As Long     hwndOwner As Long     hInstance As Long     lpstrFilter As String     lpstrCustomFilter As String     nMaxCustFilter As Long     nFilterIndex As Long     lpstrFile As String     nMaxFile As Long     lpstrFileTitle As String     nMaxFileTitle As Long     lpstrInitialDir As String     lpstrTitle As String     flags As Long     nFileOffset As Integer     nFileExtension As Integer     lpstrDefExt As String     lCustData As Long     lpfnHook As Long     lpTemplateName As String     End Type     Const OFN_ALLOWMULTISELECT = &H200     Const OFN_EXPLORER = &H80000     Const OFN_PATHMUSTEXIST = &H800     Const OFN_FILEMUSTEXIST = &H1000          Private Sub Command1_Click()     Dim OpenFile As OPENFILENAME     Dim lReturn As Long     Dim sFilter As String     OpenFile.lStructSize = Len(OpenFile)     OpenFile.hwndOwner = Me.hWnd     OpenFile.hInstance = App.hInstance     sFilter = "All Files(*.*)" & Chr(0)     OpenFile.lpstrFilter = sFilter     OpenFile.nFilterIndex = 1     OpenFile.lpstrFile = String(1000000, 0)     OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1     OpenFile.lpstrFileTitle = OpenFile.lpstrFile     OpenFile.nMaxFileTitle = OpenFile.nMaxFile     OpenFile.lpstrInitialDir = "C:\"     OpenFile.lpstrTitle = "Use the Comdlg API not the OCX"     OpenFile.flags = OFN_ALLOWMULTISELECT Or OFN_EXPLORER Or OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST     lReturn = GetOpenFileName(OpenFile)     If lReturn = 0 Then     MsgBox "The User pressed the Cancel Button"     Else     MsgBox OpenFile.lpstrFileTitle     End If     End Sub

选择多个文件打开的时候无显示,选择一个的时候才显示文件名,为什么会这样呢?就算没分离出单个文件名,一个包含多个文件名的字符串总有吧?

[解决办法]
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Private Sub FileOpen_Click()
Dim ofn As OPENFILENAME
Dim rtn As String

ofn.lStructSize = Len(ofn)
ofn.hwndOwner = Me.hWnd
ofn.hInstance = App.hInstance
ofn.lpstrFilter = "所有文件|*.*"
ofn.lpstrFile = Space(254)
ofn.nMaxFile =32767

ofn.lpstrFileTitle = Space(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = App.Path
ofn.lpstrTitle = "打开文件"
ofn.flags=Flags = cdlOFNHideReadOnly or cdlOFNAllowMultiselect or cdlOFNExplorer or cdlOFNNoDereferenceLinks

rtn = GetOpenFileName(ofn)

filename = Split(rtn, Chr$(0)) '把文件名分隔出来,分成一个一个的文件名,包括路径
If UBound(filename) >= 1 Then '如果是多个文件
For i = 1 To UBound(filename)
filename(i) = filename(0) & "\" & filename(i) '把每个文件名组合成完整的文件名

Next i
Else '如果只打开了一个文件

filename(0)=rtn


End If

End Sub

读书人网 >VB

热点推荐