【发布时间】:2016-10-07 16:02:13
【问题描述】:
我无法使用 Win32 OpenFileDialog 类
我尝试了下面的示例代码,我直接从Microsoft Documentation 复制粘贴到我的方法中,但我收到错误 CS0246,因为编译器找不到 OpenFileDialog。
我尝试添加对 Win32 的引用,但找不到。
顺便说一句,我确实尝试使用 .NET OpenFileDialog 和 FolderBrowserDialog 类,但它们无法打开具有起始位置的文件夹,并且该选项对我的应用程序来说是绝对必要的。
我做错了什么?
这是我的代码。
// Configure open file dialog box
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".txt"; // Default file extension
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension
// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();
// Process open file dialog box results
if (result == true)
{
// Open document
string filename = dlg.FileName;
}
编辑:问题已解决(以下解决方案)
错误来自表单设计器。我最初在我的表单中放置了一个 FolderBrowserDialog 对象。默认情况下,Visual Studio 2015 创建一个将 RootFolder 设置为 Desktop 的对象。现在,即使您将 SelectedPath 设置为目标文件夹,FolderBrowserDialog 仍然会打开桌面文件夹而不是它。
所以我在我的事件处理程序中实例化了一个 FolderBrowserDialog 对象,并将 SelectedPath 设置为我的目标文件夹,而未设置 RootFolder。现在它就像一个魅力。
private void B_Browse_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.SelectedPath = MyTargetFolder;
DialogResult result = fbd.ShowDialog();
// do stuff
}
谢谢大家,祝你有美好的一天:)
【问题讨论】:
-
.Net 库中的 OpenFileDialog 有一个 InitialDirectory 和 FolderBrowserDialog 有一个 RootFolder 两者都用于设置对话框的开始位置......在你的例子中也没有你设置开始的位置对话框的位置指出这在您的应用中是必要的。
-
RootFolder 只接受 Environment.SpecialFolder 类型的变量。至于 SelectedPath,不管你是否用 RootFolder 设置它都不起作用。顺便说一句,我没有在我的代码中添加一个开始位置,因为它首先不起作用,花了一整天的时间谷歌搜索并试图无济于事,所以在编译器抱怨后我没有更进一步。
-
好吧,它确实适用于挑选文件,但不适用于文件夹。显然微软已经决定只允许通过 FolderBrowser 类选择文件夹,不幸的是你不能设置开始位置(StackOverflow 上的很多人都有同样的问题)