我在让 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,但它们根本没有失败。