OpenFileDialog取消/关闭触发FileNotFoundException崩溃求修正代码
解决OpenFileDialog取消后触发FileNotFoundException的问题
你的代码里有几个关键问题导致了崩溃,我帮你修正并解释每一处修改:
原代码的核心问题:
- 两次调用
ShowDialog(),导致弹出两次对话框,逻辑完全混乱 - 错误地将
FileName(字符串)和DialogResult.Cancel(枚举值)做比较,这个判断永远不会成立 - 在用户取消对话框后,仍然尝试读取默认的"Select a Text File..."这个不存在的文件
- 过滤器
Filter的格式错误,少了点(应该是*.txt而不是*txt) - 搜索字符串
Lookfor是空值,会导致Contains永远返回true,失去实际意义
修正后的完整代码
Private Sub HuraButton1_Click(sender As Object, e As EventArgs) Handles HuraButton1.Click Dim openFileDialog1 As New OpenFileDialog() ' 设置对话框属性,修正过滤器格式 openFileDialog1.FileName = "Select a Text File..." openFileDialog1.Filter = "Text Files (*.txt)|*.txt" openFileDialog1.InitialDirectory = "C:\Users\Public\Desktop\" openFileDialog1.Title = "Select a File" ' 修正拼写错误:Files -> File ' 只调用一次ShowDialog,并保存结果 Dim dialogResult As DialogResult = openFileDialog1.ShowDialog() ' 先判断用户是否确认选择了文件 If dialogResult = DialogResult.OK Then ' 确认文件存在后再读取(额外的安全检查) If IO.File.Exists(openFileDialog1.FileName) Then Dim findString = IO.File.ReadAllText(openFileDialog1.FileName) Dim lookFor As String = "你要搜索的内容" ' 这里替换成实际要查找的字符串 If findString.Contains(lookFor) Then MsgBox("Found") Else MsgBox("Not Found") End If Else MsgBox("Selected file does not exist.") End If Else ' 用户取消或关闭对话框时的提示 MsgBox("No file selected.") End If End Sub
关键修改说明:
- 只调用一次
ShowDialog()并保存结果:避免重复弹出对话框,通过dialogResult变量判断用户操作 - 正确判断对话框结果:用
dialogResult = DialogResult.OK来确认用户确实选择了文件,取消时进入Else分支,不会执行文件读取逻辑 - 增加文件存在检查:即使用户选择了文件,也额外用
IO.File.Exists验证,进一步避免找不到文件的情况 - 修正过滤器格式:确保
Filter能正确筛选txt文件 - 修复拼写错误:把标题里的"Select a Files"改成"Select a File",更准确
- 提示设置搜索字符串:把空的
lookFor变量改成需要实际搜索的内容,让功能有意义
这样修改后,无论用户取消对话框还是选择不存在的文件,程序都不会崩溃,而是给出友好的提示。
内容的提问来源于stack exchange,提问作者user9209064
相关产品推荐
相关产品推荐

