gpt4 book ai didi

c# - 是否可以使用非特殊文件夹作为 FolderBrowserDialog 的根文件夹?

转载 作者:行者123 更新时间:2023-11-30 17:09:28 24 4
gpt4 key购买 nike

FolderBrowserDialog.RootFolder Property仅限于 Environment.SpecialFolder 中定义的特殊文件夹枚举器。然而在我的应用程序中,我们需要显示这个对话框,但是根路径需要是可配置的,并且通常是一个自定义文件夹,与枚举器中的任何特殊文件夹无关。

如何显示文件夹浏览器,其中根目录已分配给自定义文件夹?也许 RootFolder 属性不可能,但是否可以通过其他方式产生相同的效果(即用户无法在根文件夹之外查看或选择)。在 this answer ,有人暗示可能使用反射操作,但没有更新。知道这在 .NET 中是否可行吗?

最佳答案

我根据 this solution 编写了这个解决方案由 ParkerJay86 提供。该解决方案适用于 Windows 8,并测试了多个路径。考虑到您指定的根文件夹应以 DriveLetter:\ 开头,例如“C:\ProgramData

    private void browseFolder_Click(object sender, EventArgs e)
{
String selectedPath;
if (ShowFBD(@"C:\", "Please Select a folder", out selectedPath))
{
MessageBox.Show(selectedPath);
}
}

public bool ShowFBD(String rootFolder, String title, out String selectedPath)
{
var shellType = Type.GetTypeFromProgID("Shell.Application");
var shell = Activator.CreateInstance(shellType);
var result = shellType.InvokeMember("BrowseForFolder", BindingFlags.InvokeMethod, null, shell, new object[] { 0, title, 0, rootFolder });
if (result == null)
{
selectedPath = "";
return false;
}
else
{
StringBuilder sb = new StringBuilder();
while (result != null)
{
var folderName = result.GetType().InvokeMember("Title", BindingFlags.GetProperty, null, result, null).ToString();
sb.Insert(0, String.Format(@"{0}\", folderName));
result = result.GetType().InvokeMember("ParentFolder", BindingFlags.GetProperty, null, result, null);
}
selectedPath = sb.ToString();

selectedPath = Regex.Replace(selectedPath, @"Desktop\\Computer\\.*\(\w:\)\\", rootFolder.Substring(0, 3));
return true;
}
}

关于c# - 是否可以使用非特殊文件夹作为 FolderBrowserDialog 的根文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12946488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com