FolderNameEditor.FolderBrowser 类使用SHBrowseForFolder shell 函数。基于用户输入无效路径的默认功能是返回默认选定项目(在本例中为桌面文件夹)。
SHBrowseForFolder shell 函数需要一个BROWSEINFO(结构)类型的参数。
此结构允许定义回调函数(指向应用程序定义函数的指针,当事件发生时对话框调用该函数),并且正是在此回调中,才有可能实现您的要求。
当 FolderBrowser 调用此 shell 函数时,此回调函数设置为 null,因此无法使用 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;
}
}
希望这可以帮助。