1

我在让 openFileDialog 显示时遇到问题。

这是我目前的情况:

我有一个包含多个表单的 WinForms 程序,但它们都在同一个线程中运行。目前,我有两个表单,每个表单都有一个 saveFileDialog 和 openFileDialog。

对于第一种形式,即在启动时打开的形式,saveFileDialog 和 openFileDialog 都可以正常工作,但对于第二种形式,openFileDialog 甚至拒绝打开。

这是我现在得到的堆栈跟踪:

'System.IndexOutOfRangeException' 类型的第一次机会异常发生在 System.Windows.Forms.dll 中的 System.Windows.Forms.OpenFileDialog.OpenFile()

这是发生问题的代码:

private void loadScreenshotToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            bmpOpenFileDialog = new OpenFileDialog();
            bmpOpenFileDialog.Filter = "Bitmap|*.bmp;*.dib|Exchangable Image Format|*.exif|Icon|*.ico|JPEG|*.jpg;*.jpeg;*" +
    ".jpe;*.jfif|GIF|*.gif|PNG|*.png|All files|*.*";
            this.bmpSaveFileDialog.Title = "Load Screenshot";
            bmpOpenFileDialog.OpenFile();
        }
        catch (Exception ex)
        {
            MessageBox.Show("\nReport this error to the creator:\n\n" + ex);
            System.Diagnostics.Debug.WriteLine(ex.StackTrace);
        }
    }

如果用户单击确定,这将被触发:

private void bmpOpenFileDialog_FileOk(object sender, CancelEventArgs e)
    {
        Image tempIMG = Image.FromFile(bmpOpenFileDialog.FileName);
        oriBmp = new Bitmap(tempIMG);
        prntscrPictureBox.Image = oriBmp;
        saveScreenshotToolStripMenuItem.Enabled = true;
        zoomInToolStripMenuItem.Enabled = true;
        zoomOutToolStripMenuItem.Enabled = true;
        originalZoomToolStripMenuItem.Enabled = true;
        fullSizeToolStripMenuItem.Enabled = true;
        customToolStripMenuItem.Enabled = true;
        zToolStripStatusLabel.Text = "Zoom Level: " + zoomFactor.ToString("2F");
    }
  • 我最初直接从工具箱中使用 openFileDialog ,其属性已更改,然后尝试尝试另一种方式,如您现在所见,在它给我问题之后。

  • 它在某个时候给我的另一个错误是关于找不到文件,好像 openfiledialog 甚至在显示之前就试图打开一个不存在的文件。

  • 我还在其他形式中使用了相当多的 p/Invokes,以及上面代码所在的形式中的一些。尽管它们处理位图和屏幕。

  • 我希望这不是关于我遇到的问题的太多信息。如果还不够,请告诉我您还希望我提供什么。

  • 我知道这个问题可能看起来与这个问题(C# OpenFileDialog 中的 Stackoverflow/CLR 错误)相似,但是这个问题还没有被接受的答案。但与他的问题不同,虽然我确实有 2 个 saveFileDialogs 和 1 个其他 openFileDialogs,但它们根本没有失败。

4

1 回答 1

2

您还没有提示用户选择文件...您需要显示OpenFileDialog.

...
bmpOpenFileDialog.ShowDialog();  // <-- you forgot this line
bmpOpenFileDialog.OpenFile();

此外,OpenFile()它本身并没有多大作用。你没有Stream对它创建的东西做任何事情。

于 2014-07-02T11:53:04.733 回答