html对话框选择文件夹,【文件夹选择对话框】类似OpenFileDialog样式的FolderBrowserDialog...

usingSystem;usingSystem.ComponentModel;usingSystem.Drawing.Design;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;namespaceFileBorserDialog

{#region Editor

///

///FolderBrowser 的设计器基类///

public classFolderNameEditor : UITypeEditor

{public overrideUITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)

{returnUITypeEditorEditStyle.Modal;

}public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, objectvalue)

{

FolderBrowserDialog browser= newFolderBrowserDialog();if (value != null)

{

browser.DirectoryPath= string.Format("{0}", value);

}if (browser.ShowDialog(null) ==DialogResult.OK)returnbrowser.DirectoryPath;returnvalue;

}

}#endregion

#region FolderBrowserDialog Base

///

///Vista 样式的选择文件对话框的基类///

[Description("提供一个Vista样式的选择文件对话框")]

[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))]public classFolderBrowserDialog : Component

{///

///初始化 FolderBrowser 的新实例///

publicFolderBrowserDialog()

{

}#region Public Property

///

///获取在 FolderBrowser 中选择的文件夹路径///

public string DirectoryPath { get; set; }///

///向用户显示 FolderBrowser 的对话框///

/// 任何实现 System.Windows.Forms.IWin32Window(表示将拥有模式对话框的顶级窗口)的对象。

///

publicDialogResult ShowDialog(IWin32Window owner)

{

IntPtr hwndOwner= owner != null ?owner.Handle : GetActiveWindow();

IFileOpenDialog dialog= (IFileOpenDialog)newFileOpenDialog();try{

IShellItem item;if (!string.IsNullOrEmpty(DirectoryPath))

{

IntPtr idl;uint atts = 0;if (SHILCreateFromPath(DirectoryPath, out idl, ref atts) == 0)

{if (SHCreateShellItem(IntPtr.Zero, IntPtr.Zero, idl, out item) == 0)

{

dialog.SetFolder(item);

}

}

}

dialog.SetOptions(FOS.FOS_PICKFOLDERS|FOS.FOS_FORCEFILESYSTEM);uint hr =dialog.Show(hwndOwner);if (hr ==ERROR_CANCELLED)returnDialogResult.Cancel;if (hr != 0)returnDialogResult.Abort;

dialog.GetResult(outitem);stringpath;

item.GetDisplayName(SIGDN.SIGDN_FILESYSPATH,outpath);

DirectoryPath=path;returnDialogResult.OK;

}finally{

Marshal.ReleaseComObject(dialog);

}

}#endregion

#region BaseType[DllImport("shell32.dll")]private static extern int SHILCreateFromPath([MarshalAs(UnmanagedType.LPWStr)] string pszPath, out IntPtr ppIdl, ref uintrgflnOut);

[DllImport("shell32.dll")]private static extern int SHCreateShellItem(IntPtr pidlParent, IntPtr psfParent, IntPtr pidl, outIShellItem ppsi);

[DllImport("user32.dll")]private static externIntPtr GetActiveWindow();private const uint ERROR_CANCELLED = 0x800704C7;

[ComImport]

[Guid("DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7")]private classFileOpenDialog

{

}

[ComImport]

[Guid("42f85136-db7e-439c-85f1-e4075d135fc8")]

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]private interfaceIFileOpenDialog

{

[PreserveSig]uint Show([In] IntPtr parent); //IModalWindow

void SetFileTypes(); //not fully defined

void SetFileTypeIndex([In] uintiFileType);void GetFileTypeIndex(out uintpiFileType);void Advise(); //not fully defined

voidUnadvise();voidSetOptions([In] FOS fos);void GetOptions(outFOS pfos);voidSetDefaultFolder(IShellItem psi);voidSetFolder(IShellItem psi);void GetFolder(outIShellItem ppsi);void GetCurrentSelection(outIShellItem ppsi);void SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] stringpszName);void GetFileName([MarshalAs(UnmanagedType.LPWStr)] out stringpszName);void SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] stringpszTitle);void SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] stringpszText);void SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] stringpszLabel);void GetResult(outIShellItem ppsi);void AddPlace(IShellItem psi, intalignment);void SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] stringpszDefaultExtension);void Close(inthr);void SetClientGuid(); //not fully defined

voidClearClientData();voidSetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter);void GetResults([MarshalAs(UnmanagedType.Interface)] out IntPtr ppenum); //not fully defined

void GetSelectedItems([MarshalAs(UnmanagedType.Interface)] out IntPtr ppsai); //not fully defined

}

[ComImport]

[Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE")]

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]private interfaceIShellItem

{void BindToHandler(); //not fully defined

void GetParent(); //not fully defined

void GetDisplayName([In] SIGDN sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out stringppszName);void GetAttributes(); //not fully defined

void Compare(); //not fully defined

}private enum SIGDN : uint{

SIGDN_DESKTOPABSOLUTEEDITING= 0x8004c000,

SIGDN_DESKTOPABSOLUTEPARSING= 0x80028000,

SIGDN_FILESYSPATH= 0x80058000,

SIGDN_NORMALDISPLAY= 0,

SIGDN_PARENTRELATIVE= 0x80080001,

SIGDN_PARENTRELATIVEEDITING= 0x80031001,

SIGDN_PARENTRELATIVEFORADDRESSBAR= 0x8007c001,

SIGDN_PARENTRELATIVEPARSING= 0x80018001,

SIGDN_URL= 0x80068000}

[Flags]private enumFOS

{

FOS_ALLNONSTORAGEITEMS= 0x80,

FOS_ALLOWMULTISELECT= 0x200,

FOS_CREATEPROMPT= 0x2000,

FOS_DEFAULTNOMINIMODE= 0x20000000,

FOS_DONTADDTORECENT= 0x2000000,

FOS_FILEMUSTEXIST= 0x1000,

FOS_FORCEFILESYSTEM= 0x40,

FOS_FORCESHOWHIDDEN= 0x10000000,

FOS_HIDEMRUPLACES= 0x20000,

FOS_HIDEPINNEDPLACES= 0x40000,

FOS_NOCHANGEDIR= 8,

FOS_NODEREFERENCELINKS= 0x100000,

FOS_NOREADONLYRETURN= 0x8000,

FOS_NOTESTFILECREATE= 0x10000,

FOS_NOVALIDATE= 0x100,

FOS_OVERWRITEPROMPT= 2,

FOS_PATHMUSTEXIST= 0x800,

FOS_PICKFOLDERS= 0x20,

FOS_SHAREAWARE= 0x4000,

FOS_STRICTFILETYPES= 4}#endregion}#endregion}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值