FolderNameEditor.FolderBrowser类利用shell函数SHBrowseForFolder。基于用户输入无效路径的默认功能是返回默认选定项目(在本例中为桌面文件夹)。
SHBrowseForFolder shell函数需要BROWSEINFO(结构)类型的参数。
这个结构允许定义一个回调函数(一个指向应用程序定义的函数的指针,当事件发生时对话框会调用它),并且在这个回调函数中可能实现你所需要的。
当FolderBrowser调用这个shell函数时,该回调函数被设置为null,所以没有办法使用FolderNameEditor类来实现您所需要的。
但是,您可以使用codeproject上的一个库,它使用SHBrowseForFolder并包装事件回调,通过事件(OnValidateFailed)提供对无效文件夹条目的访问。请参阅:C# does Shell, Part 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;
}
}
希望这有助于。
WinForms ['FolderBrowserDialog'](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.folderbrowserdialog.aspx)类没有'Style'属性,它需要' FolderBrowserStyles'值...你实际使用了哪些类? –
http://msdn.microsoft.com/en-us/library/system.windows.forms.design.foldernameeditor.folderbrowser%28v=VS.90%29.aspx – galbarm
这是一个受保护的嵌套密封类。你是否在窃取反思以达成目标? –