无法导入Microsoft.win32.OpenFileDialog

时间:2016-06-07 16:29:40

标签: c# .net winforms

我无法使用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
}    

谢谢大家,祝你有个美好的一天:)

3 个答案:

答案 0 :(得分:1)

对于WinForms,您应该使用var dpiProperty = typeof(SystemParameters).GetProperty("Dpi", BindingFlags.NonPublic | BindingFlags.Static); var dpi = (int)dpiProperty.GetValue(null, null); var pixelSize = 96.0 / dpi; foreach (var dataGridColumn in this.DataGrid.Columns) { var actualColumnWidth = dataGridColumn.Width.DisplayValue + (pixelSize / 2); var div = (actualColumnWidth * 1000) / (pixelSize * 1000); actualColumnWidth = (int)div * pixelSize; dataGridColumn.Width = new DataGridLength(actualColumnWidth, DataGridLengthUnitType.Pixel); } 对象。

答案 1 :(得分:1)

您可以使用FolderBrowseDialog设置开始文件夹,问题是树视图不会滚动到它,请参阅SO Question。

Why FolderBrowserDialog dialog does not scroll to selected folder?

        FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.RootFolder = Environment.SpecialFolder.MyComputer;
        fbd.SelectedPath = @"C:\SomeFolder\";
        fbd.ShowDialog();

答案 2 :(得分:0)

确保您的using System.Windows.Forms声明在那里。

然后它很容易:

OpenFileDialog dlg = new OpenFileDialog();
dlg.FileName = "Document";
dlg.DefaultExt = ".txt";
dlg.Filter = "Text documents (.txt)|*.txt";


Nullable<bool> result = dlg.ShowDialog(); 
// I get an error on this "cannot implicitly convert"
DialogResult result = dlg.ShowDialog();


if (result == true) //doesn't work with DialogResult
{
string filename = dlg.FileName;
}

老实说,有很多问题。见this is another stack article related.希望这有帮助。