C# 如何在文件对话框窗口中引发文件扩展名异常?

C# 如何在文件对话框窗口中引发文件扩展名异常?,c#,file,C#,File,我正在编写将pdf文件上载到第三方服务器的代码。我已经做了一些路径验证检查。我正在检查文件是否存在。现在,对于这个验证,c#会自动抛出一个异常消息框,而不关闭文件对话框(浏览器窗口)。我想对文件扩展名实现相同的验证。我尝试检查扩展名,然后在消息框中抛出异常,但文件对话框关闭。我附加了一个屏幕截图,以便这变得更清晰。 我要为文件扩展名实现此验证。据我所知,验证文件扩展名没有例外 public System.Windows.Forms.OpenFileDialog cmndBrowseOpen;

我正在编写将pdf文件上载到第三方服务器的代码。我已经做了一些路径验证检查。我正在检查文件是否存在。现在,对于这个验证,c#会自动抛出一个异常消息框,而不关闭文件对话框(浏览器窗口)。我想对文件扩展名实现相同的验证。我尝试检查扩展名,然后在消息框中抛出异常,但文件对话框关闭。我附加了一个屏幕截图,以便这变得更清晰。

我要为文件扩展名实现此验证。据我所知,验证文件扩展名没有例外

public System.Windows.Forms.OpenFileDialog cmndBrowseOpen;
public System.Windows.Forms.SaveFileDialog cmndBrowseSave;
public System.Windows.Forms.DialogResult cmdBrowseResult
public void cmdBrowse_Click()
    {
        const string sFilter = "PDFs (*.pdf)|*.pdf";
        string sMsg = String.Empty;
        string sTitle = String.Empty;
        FileInfo oFile = null;

        try
        {
            if (moFrmIntComplaint != null)
            {
                moFrmIntComplaint.cmndBrowseOpen.Filter = sFilter;
                moFrmIntComplaint.cmndBrowseOpen.Title = ResourceHandler.Resources.GetString("BrowseFile:Title");
                moFrmIntComplaint.cmdBrowseResult = moFrmIntComplaint.cmndBrowseOpen.ShowDialog();
                string fileExtension = Path.GetExtension(moFrmIntComplaint.cmndBrowseOpen.FileName);
                moFrmIntComplaint.cmndBrowseOpen.DefaultExt = ".pdf";

                if (fileExtension != ".pdf")
                {
                    moFrmIntComplaint.cmndBrowseOpen.FileOk += delegate(object s, System.ComponentModel.CancelEventArgs ev)
                    {

                        ev.Cancel = true;

                    };
                }
                    if (String.IsNullOrEmpty(moFrmIntComplaint.cmndBrowseOpen.FileName) == false)
                    {
                        oFile = new FileInfo(moFrmIntComplaint.cmndBrowseOpen.FileName);

                        if ((oFile != null) && (File.Exists(moFrmIntComplaint.cmndBrowseOpen.FileName) && (fileExtension == ".pdf")))
                        {
                            if (Convert.ToDouble(oFile.Length) > dMaxFileSize)
                            {
                                sTitle = ResourceHandler.Resources.GetString("BrowseFile:FilSizTitle");
                                sMsg = ResourceHandler.Resources.GetString("BrowseFile:FileSize");
                                Cerner.Foundations.Measurement.TimedMessageBox.Show(sMsg, sTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                moFrmIntComplaint.lblFileName.Text = System.String.Empty;
                                moFrmIntComplaint.lblFilePath.Text = System.String.Empty;
                                moFrmIntComplaint.cmdRemove.Visible = false;
                            }
                            else
                            {
                                        moFrmIntComplaint.lblFileName.Text = Path.GetFileName(moFrmIntComplaint.cmndBrowseOpen.FileName);
                                        moFrmIntComplaint.lblFilePath.Text = moFrmIntComplaint.cmndBrowseOpen.FileName;
                                        moFrmIntComplaint.cmdRemove.Left = moFrmIntComplaint.lblFileName.Left + moFrmIntComplaint.lblFileName.Width + 5;
                                        moFrmIntComplaint.cmdRemove.Visible = true;

                            }
                        }
                    }
            }
            return;
        }
前三条语句位于另一个名为MOFRMINTCOMPAINT的类中。由于这些变量在browse_click方法中使用,这就是我在这里提到这些变量的原因。我已尝试使用委派

即使这样也无济于事。

它不会“抛出异常消息框”,而是通过显示消息框来处理异常。如果您在某个点抛出异常,它将跳到顶部,直到它被处理。是的,C#处理异常并给出适当的消息(如果文件存在或不存在)。我想知道如何为扩展实现类似的处理。具体地说,我希望在出现错误消息时后台窗口(文件对话框)打开。粘贴代码,我们将进行查看。您不应该在
FileOk
处理程序中执行所有验证吗?现在还不清楚你想在这里做什么。你可以在“FileOk”中进行验证,但在那里,文件扩展名也没有例外。