Panel.controls.清除无效参数错误

问题描述 投票:0回答:1

enter image description hereForeach img in a folder,我在面板上画了一个图片框,当我试图重新画图片框时(在我删除一个图片框后),'panel.controls.clear();'行给出了一个错误。

Blockquote An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll Additional information: invalid parameter.

private void removeScreenshot_Click(object sender, EventArgs e)
    {
        Button btn = sender as Button;
        PictureBox pb = btn.Parent as PictureBox;
        string imgString = pb.Tag.ToString()
        pb.BackgroundImage.Dispose();
        pb.Image.Dispose();
        try
        {
            File.Delete(imgString);
            pb.Dispose();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Cannot delete img: " + ex);
        }
        reload();
    }

下面的reload()函数。

private void reload() 
    {
        bool firstImg = true;
        string[] fileList = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\screenshots");
        List<string> listOfStrings = new List<string>(fileList);
        string supportedExtensions = "*.jpg,*.gif,*.png,*.bmp,*.jpe,*.jpeg";

        listOfStrings.Reverse();

        screenShotPanel.Controls.Clear();
        if (listOfStrings.Count > 0)
        {
            foreach (string imgString in listOfStrings)
            {
                string extension = System.IO.Path.GetExtension(imgString);
                if (supportedExtensions.Contains(extension))
                {
                    PictureBox pb = new PictureBox();
                    pb.Click += new EventHandler(click_pb);
                    pb.MouseHover += new EventHandler(mouseHover_pb);
                    pb.MouseLeave += new EventHandler(mouseLeave_pb);
                    pb.Height = 100;
                    pb.Width = 100;
                    pb.Location = new Point(x, y);

                    Bitmap src = Image.FromFile(imgString) as Bitmap;
                    Bitmap cropped = CropBitmap(src, pb.Width, pb.Height);

                    Button removeScreenshot = new Button();
                    removeScreenshot.Height = 20;
                    removeScreenshot.Width = 20;
                    removeScreenshot.Location = new Point(80, 0);
                    removeScreenshot.BackColor = Color.Transparent;
                    removeScreenshot.ForeColor = Color.Transparent;
                    removeScreenshot.FlatStyle = FlatStyle.Flat;
                    removeScreenshot.FlatAppearance.BorderSize = 0;
                    removeScreenshot.MouseHover += new EventHandler(mouseHover_removeButton);
                    removeScreenshot.MouseLeave += new EventHandler(mouseLeave_removeButton);
                    removeScreenshot.Click += new EventHandler(removeScreenshot_Click);
                    pb.Controls.Add(removeScreenshot); 
                    pb.BackgroundImage = src;
                    if (firstImg)
                    {
                        pictureBox.Image = src;
                        firstImg = false;
                    }
                    pb.Image = cropped;
                    pb.Tag = imgString;
                    pb.Name = Path.GetFileName(imgString);
                    screenShotPanel.Controls.Add(pb);
                    x = x + 120;
                }

            }
        }
        else
        {
            pictureBox.Image = null;
            pictureBox.BackgroundImage = null;
        }
    }
c# controls picturebox
1个回答
-2
投票

这个问题的解决方法是通过下面的代码来解决的。

using (var bmpTemp = new Bitmap(imgString))
{
   src = new Bitmap(bmpTemp);
}

作为这段代码的替换:

Bitmap src = Image.FromFile(imgString) as Bitmap;
© www.soinside.com 2019 - 2024. All rights reserved.