我不能在我的應用程序中使用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