我需要知道PictureBox
是否在指定的Image
中包含imageList
。因为如果ImageList很长,那么需要说很多
如果if-statement
中的每个图像都在PictureBox中,则在imageList
中。
当我输入
foreach (var image in imageList1)
{
if (pictureBox1.Image = image)
{
//Code
}
}
它不起作用:/
答案 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
是一个好主意的问题是另一回事..
它真的意味着与ListViews
,TreeViews
和其他可以显示小图标图像的控件一起使用。
例如,它限制在256x256像素;另外:它的所有图像都必须具有相同的尺寸!
但如果可以的话,请坚持下去。
否则List<Image>
正如汉斯所建议的那样,是一种自然而灵活的替代方案。