如何仅使用通用对话框控件选择文件夹

时间:2009-10-18 04:55:24

标签: vb6

使用VB6

代码。

CommonDialog1.DialogTitle = "Open File"
CommonDialog1.Filter = "*.*"
CommonDialog1.FilterIndex = 1
CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer
CommonDialog1.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowOpen
If Err Then
    'MsgBox "Select Folder"
    Exit Sub
End If

从上面的代码中,我选择了一个文件,但是我不想选择文件,我只想选择文件夹。如何修改我的代码。

需要vb6代码帮助吗?

4 个答案:

答案 0 :(得分:8)

已经有一段时间了,因为我必须做任何视觉基础工作,但我认为不是使用通用对话框来获取要打开的文件的名称,你应该使用 SHBrowseForFolder 函数它已经是Windows API的一部分。这是一个描述它用法的页面的link

更新(2017年):提供的链接已损坏,但a backed-up version can be viewed on archive.org

答案 1 :(得分:7)

要选择文件夹,可以使用Shell和自动化组件。

Private shlShell As Shell32.Shell
Private shlFolder As Shell32.Folder
Private Const BIF_RETURNONLYFSDIRS = &H1

Private Sub Command1_Click()
    If shlShell Is Nothing Then
        Set shlShell = New Shell32.Shell
    End If
    Set shlFolder = shlShell.BrowseForFolder(Me.hWnd, "Select a Directory", BIF_RETURNONLYFSDIRS)
    If Not shlFolder Is Nothing Then
        MsgBox shlFolder.Title
    End If
End Sub

您需要在项目中添加对shell32.dll的引用。使用项目/参考...菜单,然后浏览shell32.dll

或者您可以像Twotymz建议的那样使用Windows API。

答案 2 :(得分:3)

这是一个老线程,但也许有人会得到这个帮助。 这段代码在VB6中适用于我:

Private Sub ChooseDir_Click()
    Dim sTempDir As String
    On Error Resume Next
    sTempDir = CurDir    'Remember the current active directory
    CommonDialog1.DialogTitle = "Select a directory" 'titlebar
    CommonDialog1.InitDir = App.Path 'start dir, might be "C:\" or so also
    CommonDialog1.FileName = "Select a Directory"  'Something in filenamebox
    CommonDialog1.Flags = cdlOFNNoValidate + cdlOFNHideReadOnly
    CommonDialog1.Filter = "Directories|*.~#~" 'set files-filter to show dirs only
    CommonDialog1.CancelError = True 'allow escape key/cancel
    CommonDialog1.ShowSave   'show the dialog screen

    If Err <> 32755 Then    ' User didn't chose Cancel.
        Me.SDir.Text = CurDir
    End If

    ChDir sTempDir  'restore path to what it was at entering
End Sub

答案 3 :(得分:-1)

我认为这是更普遍的VBA问题,在VBA for Office&gt; = 2k3中打开选择文件夹对话框。

我无法相信它太难了,因为我需要相同的功能。小小的谷歌搜索成功了。 这是一个很好的简单解决方案take a look

Function GetFolderName()
    Dim lCount As Long

    GetFolderName = vbNullString
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = OpenAt
        .Show
        For lCount = 1 To .SelectedItems.Count
            GetFolderName = .SelectedItems(lCount)
        Next lCount
    End With
End Function