我的程序有一个按钮,当点击它时会打开一个openfiledialog来选择一张图片:
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
处理这个问题,但是我不肯定哪个部分导致了这个问题?如果我在try catch
方法的调用周围加ChoosePicture()
,我至少可以阻止它崩溃程序,但是当fdialogbox中没有选择图片时仍然会抛出异常。
答案 0 :(得分:14)
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()
编辑:修复缩进
答案 1 :(得分:2)
检查对话框结果并采取相应措施:
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
}
}
答案 2 :(得分:1)
测试是否选择了文件:
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;
}
答案 3 :(得分:1)
DialogResult dresult=fDialog.ShowDialog();
检查是否dresult==DialogResult.Ok
并且仅在继续文件操作之后。
答案 4 :(得分:1)
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();
将知道他们应该在显示对话框之前添加这些属性。同样,这些真值是默认值,所以除非你在其他地方之前提到过false并在此处将其设为真。
答案 5 :(得分:1)
你可以这样做,而不是return fDialog.FileName;
和DialogResult.Cancel
是一个更好的选择,因为你寻找取消而不是OK结果。
DialogResult result = fDialog.ShowDialog();
if (result == DialogResult.Cancel)
{
return;
}
答案 6 :(得分:0)
我添加了一个布尔值,并检查是否选择了文件
protected:
char tbuf[100];
FILE *tFile;
int choice;
unsigned long int pkt_received;
unsigned long int I_pkt_rec;
unsigned long int P_pkt_rec;
double start_time;
playbackbuffer* plb;
};
我避免了这种错误。