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