我不能在我的应用程序中使用OpenFileDialog。使用GetOpenFileName而不是OpenFileDialog
正如我使用GetOpenFileName替代()方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Reader
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{
public int lstructSize;
public IntPtr hwndOwner;
public IntPtr hInstance;
public string lpstrFilter = null;
public string lpstrCustomFilter = null;
public int lMaxCustomFilter;
public int lFilterIndex;
public string lpstrFile = null;
public int lMaxFile = 0;
public string lpstrFileTitle = null;
public int lMaxFileTitle = 0;
public string lpstrInitialDir = null;
public string lpstrTitle = null;
public int lFlags;
public ushort nFileOffset;
public ushort nFileExtension;
public string lpstrDefExt = null;
public int lCustData;
public int lpfHook;
public int lpTemplateName;
}
public class OpenDialog
{
[DllImport("Comdlg32.dll",CharSet = CharSet.Auto)]
public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
}
}
然后在这样的按钮的OnClick事件使用它:
OpenFileName qofn = new OpenFileName();
qofn.lstructSize = Marshal.SizeOf(qofn);
qofn.lpstrFile = "";
qofn.lMaxFile = 256;
qofn.lpstrFileTitle = "";
qofn.lMaxFileTitle = 64;
qofn.hInstance = this.Handle;
source.Text = "Wait...";
if (OpenDialog.GetOpenFileName(qofn))
{
MessageBox.Show("ofn.file: " + qofn. lpstrFile);
}
当应用程序运行时和按钮被点击,我尝试打开文件这是发生了什么事情:
第1次尝试:
它的路径返回到我的文件,但不是 C:\迪拉\ DIRB \ DIRC \ FILENAME.EXT 我有 C:\迪拉\ DIRB \ dircfilename.ext 没有 '\' 的名字前文件
第二个尝试
一切都OK
下一个: 有随机崩溃,如随机访问冲突或GUI冻结,应用程序的进程无法在任务管理器或其他错误中抛出。
在应用程序崩溃之前,通常对话框会工作2-3次。
我的代码有什么问题?
编辑:
我不能用打开文件对话框。我正在使用WinPE 4.0(Windows评估和部署套件ADK)。当我尝试OpenFileDIalog时,它会抛出运行时错误80040111。这可能是因为核心不受支持(就像Server Core不支持OpenFileDialog一样,错误也是一样)。可能在WinPE 4.0上,它们在诸如记事本等应用程序中使用GetOpenFileName。它适用于他们。
你有什么情况'OpenFileDialog'不起作用? – 2012-01-31 23:52:10
为什么你不能使用'OpenFileDialog'? 'OpenFileDialog'可能在幕后使用'GetOpenFileName',所以它不会真的改变任何东西...... – 2012-02-01 00:17:55
顺便说一句,'这。处理'不是一个HINSTANCE,这是一个HWND – 2012-02-01 00:19:05