我有打开OpenFileDialog的代码,我正在检查文件的大小以确保它不超过特定限制。 但是,如果用户选择了一个大尺寸文件,我需要警告他并引导他返回对话框以选择其他文件或单击取消。
这是我尝试过的:
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
while (dialog.ShowDialog() != DialogResult.Cancel)
{
var size = new FileInfo(dialog.FileName).Length;
if (size > 250000)
{
MessageBox.Show("File size exceeded");
continue;
}
}
编辑: 我也尝试了以下代码,但每次调用ShowDialog时它都会打开对话框。因此,如果用户选择的文件大小为限制的3倍,则对话框将出现3次。
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
dialog.FileOk += delegate(object s, CancelEventArgs ev)
{
var size = new FileInfo(dialog.FileName).Length;
if (size > 250000)
{
XtraMessageBox.Show("File size");
dialog.ShowDialog();
}
};
if (dialog.ShowDialog() == DialogResult.OK)
{
XtraMessageBox.Show("File Selected");
}
答案 0 :(得分:7)
你在中途,FileOk事件就是你想要使用的。您缺少的是将e.Cancel属性设置为true。这使对话框保持打开状态,避免您不得不一遍又一遍地显示它。像这样:
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
dialog.FileOk += delegate(object s, CancelEventArgs ev) {
var size = new FileInfo(dialog.FileName).Length;
if (size > 250000) {
MessageBox.Show("Sorry, file is too large");
ev.Cancel = true; // <== here
}
};
if (dialog.ShowDialog() == DialogResult.OK) {
MessageBox.Show(dialog.FileName + " selected");
}
答案 1 :(得分:1)
ev.Cancel = true;检查以下代码是否符合您的目的?
public void SomeMethod()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.FileOk += new CancelEventHandler(dialog_FileOk);
dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
dialog.ShowDialog();
}
void dialog_FileOk(object sender, CancelEventArgs e)
{
OpenFileDialog dialog = sender as OpenFileDialog;
var size = new FileInfo(dialog.FileName).Length;
if (size > 250000)
{
MessageBox.Show("File size exceeded");
e.Cancel = true;
}
}
答案 2 :(得分:0)
是的,就你的要求而言,这是可以的,但一般在显示提示大小后打开Dialog不是最好的方法。而是应该显示一个提示,最好是在主窗口中显示大小的验证错误。根据HCI的可用性原则,再次打开文件对话框应该是用户有责任再次选择正确的文件。
答案 3 :(得分:0)
向FileDialog.FileOk添加处理程序,并验证其文件大小。