WPF中使用文件浏览对话框的几种方式

原文:WPF中使用文件浏览对话框的几种方式

WPF本身并没有为我们提供文件浏览的控件, 也不能直接使用Forms中的控件,而文件浏览对话框又是我们最常用的控件之一. 下面是我实现的方式

方式1: 使用win32控件OpenFileDialog

?


1

2

3

4

5

6

7

Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();

ofd.DefaultExt = ".xml";

ofd.Filter = "xml file|*.xml";

if (ofd.ShowDialog() == true)

{

     //此处做你想做的事 ...=ofd.FileName;

}

与之类似的还有 Microsoft.Win32.SaveFileDialog

  

方式2: 使用Forms中的OpenFileDialog控件

WPF中是不能直接使用Forms中的控件的,否则会提示找不到Forms名字控件. 如果你仍然要用, 答案便是添加.net 引用reference

之后就可以像下面一样正常使用Forms中的控件了

?


1

2

3

4

5

6

7

8

9

System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

openFileDialog1.InitialDirectory = "c:\\";

openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

openFileDialog1.FilterIndex = 2;

openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

    //此处做你想做的事 ...=openFileDialog1.FileName;

}

 

类似的有文件夹浏览对话框:

?


1

2

3

4

5

6

System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();

System.Windows.Forms.DialogResult result = folderBrowserDialog.ShowDialog();

if (result == System.Windows.Forms.DialogResult.OK)

{

    tb_FolderPath.Text = folderBrowserDialog.SelectedPath;

}

 

方式三: 使用win32 api

BOOL WINAPI GetOpenFileName(  __inout  LPOPENFILENAME lpofn)

 

使用这种方式, 你需要自己实现LPOPENFILENAME结构和对GetOpenFileName方法就行封装:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

public class OpenFileName

{

    public int structSize = 0;

    public IntPtr hwnd = IntPtr.Zero;

    public IntPtr hinst = IntPtr.Zero;

    public string filter = null;

    public string custFilter = null;

    public int custFilterMax = 0;

    public int filterIndex = 0;

    public string file = null;

    public int maxFile = 0;

    public string fileTitle = null;

    public int maxFileTitle = 0;

    public string initialDir = null;

    public string title = null;

    public int flags = 0;

    public short fileOffset = 0;

    public short fileExtMax = 0;

    public string defExt = null;

    public int custData = 0;

    public IntPtr pHook = IntPtr.Zero;

    public string template = null;

}

 

public class LibWrap

{

    // Declare a managed prototype for the unmanaged function.

    [DllImport("Comdlg32.dll",SetLastError=true,ThrowOnUnmappableChar=true, CharSet = CharSet.Auto)]

    public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);

}

之后的工作就是实例化、初始化和方法调用了:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

OpenFileName ofn = new OpenFileName();

ofn.structSize = Marshal.SizeOf(ofn);

ofn.filter = "Project files\0*.xml";

ofn.file = new string(new char[256]);

ofn.maxFile = ofn.file.Length;

ofn.fileTitle = new string(new char[64]);

ofn.maxFileTitle = ofn.fileTitle.Length;

ofn.initialDir = "C:\\";

ofn.title = "Open Project";

ofn.defExt = "xml";

ofn.structSize = Marshal.SizeOf(ofn);

if (LibWrap.GetOpenFileName(ofn))

{

    //此处做你想做的事 ...=ofn.file;

}

 

方式四: 自己写控件(王道)或者使用第三方控件

 

第一种方式由于不能自己输入路径, 只能通过鼠标在treeview中进行选择, 十分的不喜欢;第三种稍微复杂;第四种有待考察,听说的第三方有SystemWrapper和WAF; 所以暂时选择第二种.

时间: 2024-11-03 21:55:30

WPF中使用文件浏览对话框的几种方式的相关文章

ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uploading files is a common requirement in web applications. In ASP.NET Core 1.0 uploading files and saving them on the server is quite easy. To that end

百度云Android版中的文件浏览方法分享

给各位百度云软件的用户们来详细的解析分享一下百度云Android版中的文件浏览的方法. 方法分享: 对于云端数据,根据文件类型系统自动将其进行了分类,主要分为,图片,文档,音乐,视频,应用,其它几大类.在百度云首页面点击我的百度云,选择相应的类型,可以浏览该类型的所有文件. 百度云支持列表视图及缩略图视图,可按menu键来进行列表视图和缩略图视图的切换. 百度云是百度公司在开放自身的核心云能力(包括云存储.云计算和大数据智能)的基础上,为广大开发者和最终用户提供的一系列云服务和产品.其服务的对象

EasyUI创建对话框的两种方式_jquery

对话框(Dialog)是一个特殊的窗口(window),可以包含在顶部的工具栏和在底部的按钮.默认情况下,对话框(Dialog)不能改变大小,但是用户可以设置 resizable 属性为 true,使其可以改变大小. 这种就是对话框了. EasyUI有两种创建方式: 第一种:通过已存在的DOM节点元素标签创建 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org

原生ajax和iframe框架实现图片文件上传的两种方式_AJAX相关

大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参考,具体内容如下 方法一:利用iframe框架上传图片 html代码如下: <div class="frm"> <form name="uploadFrom" id="uploadFrom" action="upload.

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

关于jsp和servlet中实现页面跳转的几种方式总结

 关于jsp和servlet中实现页面跳转的几种方式: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <%  RequestDispatcher rd = getServletContext().getRequestDispatcher("/test/test2.jsp");  rd.forward(request, response); %> 2. response.se

asp net mvc ef-asp.net mvc 中EF上下文的管理使用哪种方式好

问题描述 asp.net mvc 中EF上下文的管理使用哪种方式好 1,使用取线程内唯一实例的方式管理EF上下文 2,使用 using (AceManageEntities db=new AceManageEntities()) { } 请教下 使用哪种方式比较好,说说原因 解决方案 使用取线程内唯一实例的方式管理EF上下文好,毕竟是单例,减少了每次创建和销毁的过程 解决方案二: 两者没有本质的区别,即便你用using,也不会造成什么开销,底层ef使用连接池,而不是你关闭了连接它就回收的. 解决

javaScript中定义类或对象的五种方式总结_javascript技巧

第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Object; oTempCar.color = sColor; oTempCar.showColor = function (){ alert(this.color); }; return oTempCar; } var oCar1 = createCar(); var oCar2 = createCa

PHP中获取文件扩展名的N种方法小结_php技巧

第1种方法: 复制代码 代码如下: function get_extension($file) { substr(strrchr($file, '.'), 1); } 第2种方法: 复制代码 代码如下: function get_extension($file) { return substr($file, strrpos($file, '.')+1); } 第3种方法: 复制代码 代码如下: function get_extension($file) { return end(explode(