取消打开文件对话框时,如何防止出现异常
本文关键字:何防止 异常 文件 对话框 取消 | 更新日期: 2023-09-27 18:19:45
我的程序有一个按钮,点击后会打开一个打开的文件对话框来选择图片:
private string ChoosePicture()
{
fDialog.Title = "Select Picture";
fDialog.Filter = "Image Files (*.bmp, *.gif, *.jpg)|*.bmp; *.gif*;*.jpg";
fDialog.InitialDirectory = "C:";
fDialog.ShowDialog();
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
//returns a string for the directory
return fDialog.FileName.ToString();
}
在拨号结果框上使用复选框也没有解决我的问题:
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
DialogResult res = fDialog.ShowDialog();
if (res == DialogResult.OK)
{
//returns a string for the directory
return fDialog.FileName.ToString();
}
return null;
如果我选择了一张图片并完成了文件选择,代码就会工作。然而,如果我在两者之间的任何时候取消该过程,我会得到一个例外"路径不是合法形式"。我不确定我认为用try-catch
可以处理哪一部分,但我不确定是哪一部分导致了问题?如果我在对ChoosePicture()
方法的调用周围放一个try catch
,我至少可以阻止它崩溃程序,但当在fdialogbox中没有选择图片时,仍然会抛出异常。
DialogResult result = fileDialog.ShowDialog();
if (result == DialogResult.OK) {
//returns a string for the directory
return fDialog.FileName;
}
return null; //not sure what you will return if they cancel
此外,FileName已经是一个字符串,因此无需在上使用.ToString()
编辑:固定缩进
检查对话框结果并采取相应行动:
private string ChoosePicture()
{
fDialog.Title = "Select Picture";
fDialog.Filter = "Image Files (*.bmp, *.gif, *.jpg)|*.bmp; *.gif*;*.jpg";
fDialog.InitialDirectory = "C:";
DialogResult res = fDialog.ShowDialog();
if(res == DialogResult.OK)
{
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
//returns a string for the directory
return fDialog.FileName.ToString();
}
else
{
return null; // or something
}
}
测试是否选择了文件:
fDialog.ShowDialog();
if (!string.IsNullOrEmpty(fDialog.FileName))
{
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
//returns a string for the directory
return fDialog.FileName.ToString();
} else {
return String.Empty;
}
DialogResult dresult=fDialog.ShowDialog();
检查是否为dresult==DialogResult.Ok
,并且仅在继续执行文件操作之后。
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
DialogResult res = fDialog.ShowDialog();
if (res == DialogResult.OK)
{
//returns a string for the directory
return fDialog.FileName.ToString();
}
return null;
现在它会起作用的!
我们应该在对话框实际显示之前将属性添加到对话框中。因此,当它打开时,当你第一次打开它们时,它将具有所有这些属性。
编辑:好的,你已经通过工具箱添加到设计器中了,默认情况下,所有这些选项都是。但如果有人从代码中添加。它应该总是在展示之前。我会把这个留在这里。这样做的人
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
在代码中,将知道他们应该在显示对话框之前添加这些属性。同样,这些true值是默认值,所以除非你之前在其他地方提到过false,并在这里将其设为true。
您可以这样做,而不是return fDialog.FileName;
,DialogResult.Cancel
是一个更好的选项,因为您正在寻找取消而不是OK结果。
DialogResult result = fDialog.ShowDialog();
if (result == DialogResult.Cancel)
{
return;
}
我添加了一个布尔值,并检查是否选择了文件
public Form1()
{
InitializeComponent();
}
bool fileSelected = false; //default false because nothing selected at start.
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
openFile();
if (fileSelected == true)
{
codes...
}
}
string path= "";
private void openFile()
{
OpenFileDialog file= new OpenFileDialog();
file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
file.Filter = "Text File|*.txt";
//file.RestoreDirectory = true;
if (file.ShowDialog() == DialogResult.OK)
{
path= dosya.FileName;
fileSelected = true;
}
else
{
MessageBox.Show("File not selected.");
}
}
我防止这样的错误。