首页 > 代码库 > 专业实训9.10
专业实训9.10
首先在开头,先祝愿天下的所有老师教师节快乐!
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 = http://www.mamicode.com/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; 所以暂时选择第二种.
专业实训9.10
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。