C# 之 OpenFileDialog的使用
一、打开文件对话框(OpenFileDialog)
1、 OpenFileDialog控件有以下基本属性
[1]InitialDirectory:对话框的初始目录
[2]Filter:要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*"
[3]FilterIndex:在对话框中选择的文件筛选器的索引,如果选第一项就设为1
[4]RestoreDirectory:控制对话框在关闭之前是否恢复当前目录
[5]FileName:第一个在对话框中显示的文件或最后一个选取的文件,路径的返回用filename是字符串类型
[6]Title:将显示在对话框标题栏中的字符
[7]AddExtension:是否自动添加默认扩展名
[8]CheckPathExists:在对话框返回之前,检查指定路径是否存在
[9]DefaultExt:默认扩展名
[10]DereferenceLinks:在从对话框返回前是否取消引用快捷方式
[11]ShowHelp:启用"帮助按钮"
[12]ValiDateNames:控制对话框检查文件名中是否不含有无效的字符或序列
2、 OpenFileDialog控件有以下常用事件
[1]FileOk 当用户点击"打开"或"保存"按钮时要处理的事件
[2]HelpRequest 当用户点击"帮助"按钮时要处理的事件
3、可以用以下代码来实现上面这个对话框:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private void openFileDialogBTN_Click( object sender, System.EventArgs e) { System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.InitialDirectory = "c:\\" ; //注意这里写路径时要用c:\\而不是c:\ openFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*" ; openFileDialog.RestoreDirectory = true ; openFileDialog.FilterIndex = 1; DialogResult result = openFileDialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { string fName = openFileDialog.FileName; File fileOpen = new File(fName); isFileHaveName = true ; txtRich.Text = fileOpen.ReadFile(); txtRich.AppendText( "" ); } } |
二、OpenFileDialog 类的ShowDialog() 错误的解决
错误信息:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
在测试程序里没有问题,当移到多线程程序里就报以上错误。解决办法就是添加单独线程,代码如下:
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 | private Thread invokeThread; private void linkLabel1_LinkClicked( object sender, LinkLabelLinkClickedEventArgs e) { openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = patch; openFileDialog1.Filter = "xls files (*.xls)|*.xls" ; invokeThread = new Thread( new ThreadStart(InvokeMethod)); invokeThread.SetApartmentState(ApartmentState.STA); invokeThread.Start(); invokeThread.Join(); if (result == DialogResult.OK) { if (openFileDialog1.FileName != "" ) { Process.Start(openFileDialog1.FileName); } } } private void InvokeMethod() { result = openFileDialog1.ShowDialog(); } |
原文:https://www.cnblogs.com/xinaixia/p/4861502.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix