2009-10-18 11 views
7

Utilizzo di VB6Come selezionare una cartella solo utilizzando il controllo di dialogo comune

Codice.

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 

Dal codice di cui sopra, io sono la selezione di un file, ma io non voglio per selezionare un file, voglio selezionare solo la cartella. Come modificare il mio codice.

Hai bisogno di assistenza per codice vb6?

risposta

6

E 'stato un po' che ho dovuto fare qualsiasi lavoro di Visual Basic, ma penso che invece di utilizzare la finestra di dialogo comune per ottenere il nome di un file da aprire è necessario utilizzare la funzione di SHBrowseForFolder che è già parte dell'API di Windows. Ecco uno link in una pagina che descrive il suo utilizzo.

Update (2017): collegamento fornito è rotto ma a backed-up version can be viewed on archive.org

+4

nota: il collegamento è rotto. – Roylee

+0

Non farlo. La risposta dovrebbe essere autonoma e non dipendere da collegamenti esterni in quanto possono rompersi nel corso degli anni. Un link può essere fornito come riferimento per arricchire la tua risposta, ma non dovrebbe costituire il corpo principale di essa. – thebunnyrules

+0

Chiunque desideri vedere il collegamento ininterrotto può fare clic qui: https://web.archive.org/web/20081204022345/http://www.base64.co.uk:80/shbrowseforfolder.html – thebunnyrules

6

Per selezionare una cartella, è possibile utilizzare il componente Shell e automazione.

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 

Sarà necessario aggiungere un riferimento a shell32.dll al progetto. Utilizzare il menu Progetto/Riferimenti ... quindi cercare shell32.dll.

Oppure è possibile utilizzare l'API di Windows come suggerisce Twotymz.

+0

questo funziona abbastanza bene, ma il valore shlFolder.Title è solo il nome della directory selezionata e non l'intero percorso. –

+0

@KenForslund: Presumo che tu possa recuperare qualcos'altro su quel 'shlFolder'object oltre a' Title' che è più adatto. –

+0

non appare così. .ParentFolder è il nome della cartella successiva, ma ancora, solo un semplice nome singolo, non un percorso di alcun tipo. Ciò risolveva ancora il mio bisogno per il momento, ma mi aspettavo un percorso più robusto. –

1

ho pensato che è questione più generale VBA in ogni caso, l'apertura di dialogo, selezionare la cartella in VBA per Office> = 2k3.

Non potevo credere che fosse così difficile, poiché ho bisogno della stessa funzionalità. Lo ha fatto googling poco. Qui è bello soluzione semplice 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

La domanda riguarda VB6, non VBA! , Non c'è alcun 'Application.FileDialog' in VB6;). –

2

Questo è un vecchio thread, ma forse qualcuno sarà aiutato da questo. Questo codice funziona in VB6 per me:

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

Usando questo codice l'utente dovrebbe inserire un nome per un file che restituirà un NomeFile con un'estensione di '~ # ~' e anche questo andrà all'interno della cartella selezionando il pulsante Apri e senza inserire un nome non funzionerà;) . –

+0

"CurDir" è il punto qui. Funziona –

Problemi correlati