我正在尝试实现一个OpenFileDialog框,它的工作正常,除非我选择单击取消然后程序抛出一个错误,说该文件无法找到,这让我感到困惑,因为我没有选择文件。
以下是代码。我如何实现取消按钮?
OpenFileDialog1.InitialDirectory = "C:\"
OpenFileDialog1.FileName = "Select a Batch file..."
OpenFileDialog1.Filter = "Batch files (*.bat) | *.bat"
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.Cancel Then
OpenFileDialog1.Dispose()
End If
Dim R As New IO.StreamReader(OpenFileDialog1.FileName)
TextBox4.Text = R.ReadToEnd
R.Close()
Button4.Enabled = True
Button6.Enabled = True
答案 0 :(得分:2)
您注释了取消对话框的(不充分)处理。把它放回去:
Dim openFileDialog1 As New OpenFileDialog()
openFileDialog1.Filter = "Batch files (*.bat)|*.bat|All files|*.*"
Dim result = openFileDialog1.ShowDialog()
If result = DialogResult.Cancel Then
Return ' Just leave the method
End If
' … rest of method
您还应该考虑适当的变量名称。 OpenFileDialog1
,TextBox3
和Button2
从不适当的名称。良好的标识符极大地提高了代码的可读性。
答案 1 :(得分:2)
Dialog将自行配置 - 如果用户取消其预期的操作,您就不会做任何事情。这应该这样做:
OpenFileDialog1.InitialDirectory = "C:\"
OpenFileDialog1.FileName = "Select a Batch file..."
OpenFileDialog1.Filter = "Batch files (*.bat) | *.bat"
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim R As New IO.StreamReader(OpenFileDialog1.FileName)
TextBox4.Text = R.ReadToEnd
R.Close()
Button4.Enabled = True
Button6.Enabled = True
End If
当然,您必须添加一些额外的错误处理,但这是另一个故事。
答案 2 :(得分:0)
Dim result = OpenFileDialog1.ShowDialog()
If result = True Then
Dim R As New IO.StreamReader(OpenFileDialog1.FileName)
TextBox4.Text = R.ReadToEnd
R.Close()
Button4.Enabled = True
Button6.Enabled = True
else
' handle the error, e.g. msgbox (no vaild file chosen"
End If
答案 3 :(得分:0)
这对我的项目有用。
Dim bResult As DialogResult = sfdReportFile.ShowDialog()
If bResult = DialogResult.OK Then
tbFilePathName.Text = sfdReportFile.FileName.ToString
End If
您需要将结果定义为DialogResult,以检查它是否正常,并将文件路径发送到您需要的任何内容。
答案 4 :(得分:0)
在我的项目中,我使用了SaveFileDialog
。如果用户关闭了对话框窗口,则没有文件名,并且发生错误。使用下面的代码,除非有文件名要使用,否则我的进程不会运行。
If SaveFileDialog1.FileName = Nothing Then
Else
Code to run here when a file name is selected.
End If
OpenFileDialog
可以运行同样的事情。只需添加if then
即可检查文件名是否已保存,如果没有,请不要运行代码。