Как я могу заставить CommonOpenFileDialog выбирать только папки, но при этом показывать файлы? - PullRequest
13 голосов
/ 15 ноября 2011

Я использую Microsoft CommonOpenFileDialog , чтобы позволить пользователям выбирать папку, но файлы не видны, когда появляется диалоговое окно. Можно ли показывать файлы и папки, если для IsFolderPicker установлено значение true?

Мой текущий код выглядит так

var dialog = new CommonOpenFileDialog();
dialog.IsFolderPicker = true;

if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    SelectedFolderPath = dialog.FileName;
}

Ответы [ 3 ]

9 голосов
/ 20 ноября 2013

С макушки головы, вот как я это сделал

  var dialog = new CommonOpenFileDialog
  {
    EnsurePathExists = true,
    EnsureFileExists = false,
    AllowNonFileSystemItems = false,
    DefaultFileName = "Select Folder",
    Title = "Select The Folder To Process"
  };


  dialog.SetOpenButtonText("Select Folder");

  if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
  dirToProcess = Directory.Exists(dialog.FileName) ? dialog.FileName : Path.GetDirectoryName(dialog.FileName);

РЕДАКТИРОВАТЬ: Святой 2 года назад Бэтмен!


Похоже, что были внесены некоторые изменения, приведенный ниже фрагмент, кажется, делает работу

var openFolder = new CommonOpenFileDialog();
openFolder.AllowNonFileSystemItems = true;
openFolder.Multiselect = true;
openFolder.IsFolderPicker = true;
openFolder.Title = "Select folders with jpg files";

if (openFolder.ShowDialog() != CommonFileDialogResult.Ok)
{
    MessageBox.Show("No Folder selected");
    return;
}

// get all the directories in selected dirctory
var dirs = openFolder.FileNames.ToArray();
1 голос
/ 16 ноября 2011

Не совсем уверен, возможно ли это сделать стандартным способом, но даже учитывая, что да, подумайте о UI .Видеть современные папки и файлы в одном месте, но иметь возможность выбирать только папки, мне не кажется хорошим интерфейсом.ИМХО, лучше и более «естественным» способом заполнять один элемент управления папками, а другой ( явно только для чтения ) заполнять только теми файлами, которые необходимо загрузить.

Надеюсь, это поможет.

0 голосов
/ 16 ноября 2011

Если вы хотите, чтобы пользователь выбирал только папку, рассматривали ли вы использование FolderBrowserDialog?

...