.net环境中使用FolderBrowser[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 grossfinch 的 blog

好久没有动手写东西了(其实以前什么也没写过;-)),今天要写的可能已经有哪位前辈完成了。拙作实在不敢拿出来现丑,高手看标题和上面的贴图就可以决定要不要看下去。不浪费大家时间。

客户的要求:有一个winform程序,用户要求可以自己选择数据文件存放的位置,简单点说就是在硬盘上选择一个目录。

最初的想法: win32 sdk中有一个shbrowseforfolder api,这也是平时使用最频繁的方法,既然用.net开发程序当然想尽量用.net framework提供的managed代码。

问题:  查阅msdn,发现folderbrowser类与shbrowseforfolder的一样的功能,但是帮助文件提示:foldernameeditor.folderbrowser 类型支持 .net 框架结构,因此不适用于直接从代码中使用。 ms似乎并不希望开发人员直接利用这个类,文档中没有关于这个类成员的任何说明。folderbrowser类的申明如下:[c#]
protected sealed class foldernameeditor.folderbrowser : component 属性是protected和sealed. 

解决方法:folderbrowser嵌套地定义在类foldernameeditor中,还好ms没有做绝把它也做成protected和sealed,这样通过继承foldernameeditor,再在继承类中实例化一个folderbrowser类就可以调用这个对话框了。至于folderbrowser的成员可以通过其它查看.net汇编的小工具获得,推荐 使用lutz roader's .net reflector,在下面的截图可以看到folderbrowser的所有成员。


该类实际上只有一个方法showdialog,反汇编以后差一点吐血。大家看看下面的就明白了。

folderbrowser.showdialog

.maxstack 3
.locals (intptr v_0, intptr v_1, int v_2, intptr v_3, browseinfo v_4, intptr v_5, imalloc v_6, dialogresult v_7)
.try l_0056 to l_00f0 finally l_00f0 to l_0115
l_0000: ldsfld intptr.zero
l_0005: stloc.0
l_0006: ldarg.1
l_0007: brfalse.s l_0012
l_0009: ldarg.1
l_000a: callvirt iwin32window.get_handle
l_000f: stloc.1
l_0010: br.s l_0018
l_0012: call unsafenativemethods.getactivewindow

本文关键:.net c# FolderBrowser
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top