C#OpenFileDialog无法打开文件

时间:2013-03-01 19:29:33

标签: c# openfiledialog

我正在尝试使用openFileDialog打开一个Bitmap图像并将其放在我的表单上。我的表格建设者......

 public Form1()
    {
        InitializeComponent();
        drawing = new Bitmap(drawingPanel.Width, drawingPanel.Height, drawingPanel.CreateGraphics());
        Graphics.FromImage(drawing).Clear(Color.White);

        // set default value for line thickness
        tbThickness.Text = "5";
    }

...打开一个带有空白屏幕的新表格,我可以使用鼠标和各种颜色选择按钮进行绘制。然后我用这个方法保存文件:

private void btnSave_Click(object sender, EventArgs e)
    {
        // save drawing
        if (file == null)   // file is a FileInfo object that I want to use
                            // to check to see if the file already exists 
                            // I haven't worked that out yet
        {
            drawing.Save("test.bmp");
            //SaveBitmap saveForm = new SaveBitmap();
            //saveForm.Show();
        }
        else
        {
            drawing.Save(fi.FullName);
        }
    }

图像会以.bmp文件的形式保存到调试文件夹中。然后我使用OpenFileDialog打开文件:

private void btnOpen_Click(object sender, EventArgs e)
    {
        FileStream myStream;
        OpenFileDialog openFile = new OpenFileDialog();
        openFile.Filter = "bmp files (*.bmp)|*.bmp";

        if (openFile.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = (FileStream)openFile.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        PictureBox picBox = new PictureBox();
                        picBox.Location = drawingPanel.Location;
                        picBox.Size = drawingPanel.Size;
                        picBox.Image = new Bitmap(openFile.FileName);
                        this.Controls.Add(picBox);
                    }
                }
            }
            catch (Exception ex)
            {

            }
        }
    }

发生了什么是OpenFileDialog框出现了。当我选择文件test.bmp时,屏幕消失,然后重新出现,当我再次选择它时,OpenFileDialog窗口消失,我回到我的表单,没有图像。希望得到一些指示。没有编译或运行时错误。

3 个答案:

答案 0 :(得分:0)

为什么要两次致电ShowDialog()

只需拨打ShowDialog一次,这样就不会像你指示的那样打开两次

来自MSDN

OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "bmp files (*.bmp)|*.bmp";

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
    try
    {
        if ((myStream = openFileDialog1.OpenFile()) != null)
        {
            using (myStream)
            {
                // Insert code to read the stream here.
                PictureBox picBox = new PictureBox();
                picBox.Location = drawingPanel.Location;
                picBox.Size = drawingPanel.Size;
                picBox.Image = new Bitmap (myStream);
                this.Controls.Add(picBox);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
    }
}

答案 1 :(得分:0)

您打开一个对话框面板,然后当它关闭时,检查结果是否正常;然后在using块中打开另一个新对话框;然后将图像的结果分配给PictureBox,然后在using块处理时抛弃所有内容。

答案 2 :(得分:0)

您正在拨打ShowDialogue两次,这可能是您问题的根源。只需使用以下代码,从方法中删除其他所有内容。您对using的使用也不正确。它会清理哪个处理结果。您需要重构或删除using语句。

private void btnOpen_Click(object sender, EventArgs e)
{
     OpenFileDialog dlg = new OpenFileDialog()
     {
            dlg.Title = "Open Image";
            dlg.Filter = "bmp files (*.bmp)|*.bmp";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                PictureBox picBox = new PictureBox();
                picBox.Location = drawingPanel.Location;
                picBox.Size = drawingPanel.Size;
                picBox.Image = new Bitmap (dlg.FileName);
                this.Controls.Add(picBox);
            }
      }
  }

上面的代码有效,但没有清理或错误处理。我会留给你的。