Класс FolderNameEditor.FolderBrowser использует функцию оболочки SHBrowseForFolder . Функциональность по умолчанию, основанная на вводе пользователем неверного пути, заключается в возврате выбранного по умолчанию элемента (который в данном случае является папкой рабочего стола).
Функция оболочки SHBrowseForFolder ожидает аргумент типа BROWSEINFO (структура).
Эта структура позволяет определять функцию обратного вызова (указатель на определенную приложением функцию, которую диалоговое окно вызывает при возникновении события), и именно в этом обратном вызове существует вероятность достижения того, что вам требуется.
Эта функция обратного вызова устанавливается в ноль, когда FolderBrowser вызывает эту функцию оболочки, поэтому нет никакого способа достичь того, что вам нужно, с помощью класса FolderNameEditor.
Однако в codeproject есть библиотека, которую вы можете использовать, которая использует SHBrowseForFolder и оборачивает обратный вызов события, предоставляя доступ к неверной записи папки через событие (OnValidateFailed). См .: C # делает Shell, часть 1
В этом событии (после некоторой проверки (поскольку пользователь может вводить что угодно)) вы можете использовать введенный путь для создания каталога.
Вот пример:
using ShellLib;
...
public class OpenFolderDialog
{
ShellBrowseForFolderDialog folderDialog;
string selectedPath;
public OpenFolderDialog()
{
folderDialog = new ShellBrowseForFolderDialog();
folderDialog.OnValidateFailed += new ShellBrowseForFolderDialog.ValidateFailedHandler(dialog_OnValidateFailed);
}
int dialog_OnValidateFailed(ShellBrowseForFolderDialog sender, ShellBrowseForFolderDialog.ValidateFailedEventArgs args)
{
selectedPath = args.invalidSel;
//Use selectedPath here to create the directory.
return 0;
}
public string GetFolder()
{
selectedPath = string.Empty;
folderDialog.ShowDialog();
return selectedPath == string.Empty ? folderDialog.FullName : selectedPath;
}
}
Надеюсь, это поможет.