C# C OpenFileDialog未打开文件

C# C OpenFileDialog未打开文件,c#,openfiledialog,C#,Openfiledialog,我正在尝试使用openFileDialog打开位图图像并将其放置在表单上。我的表单构造器 public Form1() { InitializeComponent(); drawing = new Bitmap(drawingPanel.Width, drawingPanel.Height, drawingPanel.CreateGraphics()); Graphics.FromImage(drawing).Clear(Color.Wh

我正在尝试使用openFileDialog打开位图图像并将其放置在表单上。我的表单构造器

 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窗口消失,我返回到没有图像的窗体。我希望得到一些指点。没有编译或运行时错误。

为什么要调用ShowDialog两次

只需调用ShowDialog一次,它就不会像您指出的那样打开两次

发件人:


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

您调用ShowDialogue两次,这可能是问题的根源。只需使用以下代码,就可以从方法中删除所有其他内容。你的用法也不正确。它确实会清理,这是对结果的处理。您需要重构或删除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);
            }
      }
  }

上面的代码可以工作,但没有清理或错误处理。我把这个留给你。

什么是drawingPanel?你一下子谈论了很多事情。你的主要问题是什么?如果你想知道为什么它会弹出两次:嗯,这是因为你有两个OpenFileDialogs,dlg和dHave你检查过If语句中的代码是否执行了吗?现在我看到我调用了OpenDialog两次,并且已经解决了这个问题,我的主要问题是为什么图像没有显示在我的表单上。括号太多了,但是代码运行了,除了我的表单上没有显示任何图像之外。@deadEddie我对PictureBox了解不多,但请尝试,picBox.ImageLocation=dlg.FileName;位图继承自图像,因此我认为它应该可以工作,但我会检查位图以确保对象构造正确,如果它是添加强制转换图像,或者尝试设置ImageLocation属性。我尝试了picBox.ImageLocation=dlg.FileName。一切似乎都正常,我只是没有在表单上显示图像:@deadEddie picBox.visible的值是多少?问题可能出在这段代码之外。picBox.Visible的值为真谢谢你ryrich。就像evanmcdonnal的回答一样,一切似乎都正常,但图像永远不会出现在表单上。@deadEddie:尝试干扰PictureBox选项,可能是picBox.Visible=true,并确保位置和大小设置正确。一切似乎都正常,大小和位置设置正确,Visible设置为true。在我的表单上,我放置了一个绘图面板drawingPanel,用于定位位图图像并调整其大小。我想知道我是否应该用一个图片框来代替它。@deadEddie:我已经在我的计算机上测试了这个,只是在OpenDialog部分,我打开了一个bmp图像样本,效果很好。这张照片会出现在我的表格上。我的位置和大小与您的代码不同,请尝试更改它们,例如picBox.Location=new Point0,0和picBox.Size=new Size100100作为测试?这非常有用。我似乎遇到的问题是,除了我想要图片框的区域外,图像将显示在窗体上的任何位置!?你认为我上面看到的构造器会影响这一点吗?
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);
            }
      }
  }