C#如何检查PictureBox是否包含指定图像列表中的图像?

时间:2015-09-12 20:13:19

标签: c#

我需要知道PictureBox是否在指定的Image中包含imageList。因为如果ImageList很长,那么需要说很多 如果if-statement中的每个图像都在PictureBox中,则在imageList中。 当我输入

foreach (var image in imageList1)
        {
            if (pictureBox1.Image = image)
            {
                //Code
            }
        }

它不起作用:/

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

//using System.Linq;

bool isinside = /*yourImageList*/.Images.Any(x => x == /*yourPictureBox*/.Image);

if (isinside)
{
    //is in yourImageList
    MessageBox.Show("image is from imagelist!");
    //or do what you want here!
}

答案 1 :(得分:0)

ImageList是一件特别的事情,它可能是也可能不是正确使用的对象..

关于它的一个好处是它存储的图像不是类型Image;这很好,因为它存储的每个图像都不需要GDI句柄,即使您添加了大量图像。

这样做的一个问题是,您无法将其图片与您分配给PictureBox.Image的图片进行比较。

因此,即使在更正语法后,这也行不通:

// assign an image
pictureBox1.Image = imageList1.Images[2];
// now look for it:
foreach (var  img in imageList1.Images)
{
    if (pictureBox1.Image  == img )
    {
        Console.WriteLine("Found the Image!");  // won't happen
    }
}

相反,您应该将Key存储在ImageList

中的图像中
pictureBox1.Image = imageList1.Images[2];
pictureBox1.Tag = imageList1.Images.Keys[2];

现在您可以轻松找到密钥:

foreach (var  imgKey in imageList1.Images.Keys)
{
    if (pictureBox1.Tag.ToString() == imgKey )
    {
        Console.WriteLine("Found the Image-Key!");  // will happen quite quickly!
    }
}

当然,首先使用ImageList是一个好主意的问题是另一回事..

它真的意味着与ListViewsTreeViews和其他可以显示小图标图像的控件一起使用。

例如,它限制在256x256像素;另外:它的所有图像都必须具有相同的尺寸!

但如果可以的话,请坚持下去。

否则List<Image>正如汉斯所建议的那样,是一种自然而灵活的替代方案。