2009-10-18 14 views
7

Korzystanie z VB6Jak wybrać folder tylko za pomocą wspólnego okna dialogowego sterowania

Kod.

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 

Z powyższego kodu, ja wybranie pliku, ale nie chcę, aby wybrać plik, chcę wybrać tylko folder. Jak zmodyfikować mój kod.

Potrzebujesz kodu vb6 Pomoc?

Odpowiedz

6

Minęło trochę czasu odkąd miałem robić żadnych wizualnych podstawowe prace, ale myślę, że zamiast przy użyciu okna dialogowego wspólne dla coraz nazwę pliku, aby otworzyć należy użyć SHBrowseForFolder funkcję, która jest już częścią interfejsu API systemu Windows. Oto link do strony opisującej jej użycie.

Update (2017): Pod warunkiem, link jest uszkodzony, ale a backed-up version can be viewed on archive.org

+4

uwaga: link jest zepsuty. – Roylee

+0

Nie rób tego. Odpowiedź powinna być niezależna i nie opierać się na zewnętrznych linkach, ponieważ mogą się z czasem przełamać. Link można podać jako odniesienie, aby wzbogacić swoją odpowiedź, ale nie powinien stanowić jej głównej treści. – thebunnyrules

+0

Każdy, kto chce zobaczyć nieprzerwany link, może kliknąć tutaj: https://web.archive.org/web/20081204022345/http://www.base64.co.uk:80/shbrowseforfolder.html – thebunnyrules

6

Aby wybrać folder, można użyć komponentu Shell i Automation.

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 

Musisz dodać odniesienie do shell32.dll do swojego projektu. Skorzystaj z menu Projekt/Referencje ..., a następnie przejrzyj shell32.dll.

Lub możesz użyć interfejsu Windows API, jak sugeruje Twotymz.

+0

to działa dość dobrze, ale wartość shlFolder.Title jest tylko wybrana nazwa katalogu, a nie cała ścieżka. –

+0

@KenForslund: Zakładam, że możesz pobrać coś innego na tym 'shlFolder'object oprócz' Title', który jest bardziej odpowiedni. –

+0

nie jest wyświetlany. .ParentFolder to nazwa następnego folderu, ale znowu tylko prosta pojedyncza nazwa, a nie jakakolwiek ścieżka. To wciąż rozwiązało moją potrzebę w tej chwili, ale spodziewałem się solidniejszej ścieżki. –

1

I mimo że jest bardziej ogólne pytanie VBA tak, otwierając okno dialogowe Wybierz folder, w VBA dla pakietu Office> = 2k3.

Nie mogłem uwierzyć, że jest to trudne, ponieważ potrzebuję tej samej funkcjonalności. Zrobiło to trochę google. Tutaj jest ładne proste rozwiązanie 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 
+0

Pytanie dotyczy VB6, a nie VBA! , Nie ma żadnego 'Application.FileDialog' w VB6;). –

2

Jest to stary wątek, ale może ktoś będzie wspomagany przez to. Ten kod działa w VB6 dla mnie:

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 
+0

Używając tego kodu, użytkownik powinien wprowadzić nazwę pliku, który zwróci Nazwę pliku z rozszerzeniem '~ # ~ ', a także przejdzie do folderu, wybierając przycisk Otwórz i bez wpisywania nazwy nie będzie działać;) . –

+0

"CurDir" jest tutaj punktem. To działa –

Powiązane problemy