Como usar OpenFileDialog
para selecionar pastas?
Eu usaria o seguinte projeto: https://github.com/scottwis/OpenFileOrFolderDialog
No entanto, enfrentei um problema. Ele usa a GetOpenFileName
função e a OPENFILENAME
estrutura. E OPENFILENAME
tem o membro nomeado templateID
. É o identificador para o modelo de diálogo. E o projeto contém o res1.rc
arquivo e a caixa de diálogo de modelo init também. Mas não consegui descobrir como anexar esse arquivo ao meu projeto c #.
Existe uma maneira melhor de usar um OpenFileDialog
para selecionar pastas?
c#
.net
dialog
openfiledialog
Yun
fonte
fonte
ValidateNames
eCheckFileExists
são definidas como false eFileName
é dado um valor simulado para indicar que um diretório é selecionado. Eu digo hack porque é confuso para os usuários sobre como selecionar uma pasta. Veja Selecione o arquivo ou pasta a partir da mesma caixa de diálogoValidateNames
eCheckFileExists
parafalse
não estava funcionando, eu precisava para configurá-los para0
(ou aprender PowerShell melhor)Respostas:
Basicamente, você precisa da
FolderBrowserDialog
classe:Exemplo:
Se você trabalha no WPF, precisa adicionar a referência
System.Windows.Forms
.você também tem que adicionar
using System.IO
para aDirectory
aulafonte
new CommonOpenFileDialog { IsFolderPicker = true }
.Como uma observação para futuros usuários que gostariam de evitar o uso
FolderBrowserDialog
, a Microsoft lançou uma API chamada WindowsAPICodePack que tinha uma caixa de diálogo útil chamadaCommonOpenFileDialog
, que poderia ser configurada em umIsFolderPicker
modo. A API está disponível na Microsoft como um pacote NuGet .Isso é tudo o que eu precisava para instalar e usar o
CommonOpenFileDialog
. (NuGet lidou com as dependências)Para a linha de inclusão:
Uso:
fonte
Microsoft.WindowsAPICodePack.Shell
pacote através do NuGet antes de poder usá-loCommonOpenFileDialog
.FolderBrowserDialog
usuários: o uso de várias instâncias simultâneas pode criar problemas. IssoCommonOpenFileDialog
é melhorWindowsAPICodePack-Shell
Há uma solução hackish usando
OpenFileDialog
whereValidateNames
eCheckFileExists
são ambos configurados como false eFileName
recebe um valor simulado para indicar que um diretório está selecionado.Eu digo hack porque é confuso para os usuários sobre como selecionar uma pasta. Eles precisam estar na pasta desejada e pressione Abrir enquanto o nome do arquivo diz "Seleção de Pasta".
Isso se baseia em Selecionar arquivo ou pasta na mesma caixa de diálogo de Denis Stankovski.
fonte
Folder Selection.
será pregada no final do nome do arquivo da seguinte maneira:C:\Folder Selection.
acho que você sempre pode remover esses caracteres da string. Ainda parece melhor do que o FolderBrowserDialogOpen
botão principal da caixa de diálogo não funcionará conforme o esperado! isso faz você voltar para a pasta anterior! mas funciona quando você apenas clique duas vezes em pastas para selecioná-los ou selecione alguns arquivos dentro de cada pasta (se houver qualquer arquivo que você pode escolher)Estranho que tantas respostas / votos, mas ninguém adicione o seguinte código como resposta:
fonte
Parece-me que você está logo após o FolderBrowserDialog .
fonte
Aqui está outra solução, que tem toda a fonte disponível em um único arquivo ZIP simples.
Ele apresenta o OpenFileDialog com sinalizadores adicionais do Windows que o fazem funcionar como o diálogo de seleção de pasta do Windows 7+.
De acordo com o site, é de domínio público: "Não há licença, pois você é livre para pegar e fazer com o código o que quiser".
Links do Archive.org:
fonte
Dê uma olhada nas bibliotecas Ookii Dialogs, que possuem uma implementação de uma caixa de diálogo do navegador de pastas para Windows Forms e WPF, respectivamente.
fonte
essa deve ser a maneira mais óbvia e direta
fonte
FolderBrowserDialog
já foi oferecido aqui várias vezes e é a resposta errada. É uma interface desatualizada e muito descomplicada. Ele usaSHBrowseForFolder
por baixo e até os documentos afirmam "Para Windows Vista ou posterior, é recomendável usarIFileDialog
com aFOS_PICKFOLDERS
opção em vez daSHBrowseForFolder
função. Isso usa a caixa de diálogo Abrir arquivos no modo de seleção de pastas e é a implementação preferida".