2011-09-21 27 views
1

我在我的应用程序中向用户显示一个FolderBrowser,然后使用具有m_dialog.Style = FolderBrowserStyles.ShowTextBox的ShowDialog()来提升他。 因此,允许用户手动输入他想要选择的文件夹的路径。FolderNameEditor.FolderBrowser与FolderBrowserStyles.ShowTextBox - 从TextBox.Text自动创建新文件夹

问题是,当用户键入不存在的文件夹的路径并单击确定时,对话框将返回一些默认的DirectoryPath值。 我想要的是要创建的选定文件夹(如果它不存在,并且首先提升用户),然后在DirectoryPath属性中具有(现在有效的)路径。

任何方式来做到这一点?

+0

WinForms ['FolderBrowserDialog'](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.folderbrowserdialog.aspx)类没有'Style'属性,它需要' FolderBrowserStyles'值...你实际使用了哪些类? –

+0

http://msdn.microsoft.com/en-us/library/system.windows.forms.design.foldernameeditor.folderbrowser%28v=VS.90%29.aspx – galbarm

+0

这是一个受保护的嵌套密封类。你是否在窃取反思以达成目标? –

回答

1

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; 
    } 
} 

希望这有助于。

+0

谢谢。我怀疑没有直接的方法来做到这一点。你的回答似乎是完成它的最佳方式。 – galbarm

相关问题