先说一下发生的背景,最近在 Winform 中用到 pictuireBox,利用 Propertier 中的 Resourse 资源文件对图片进行管理,在 pictureBox 中显示图片。当将 pictureBox 中显示的图片跟所有图片都进行是否相等的判断时候全部显示 False。
试了很多种方式都不行:
- (A == B) 和 (A.Equals(B)) 都用过,都不行。
- 试过将 resourse 中的图片都定义成变量,还是不行。
- Resourse.ReferenceEquals() 也试过,不行。
- 甚至!最最可怕的是!图一张图片,定义成两个变量,在进行判断都会显示 False。
在这不研究其原理了,直接说找到的解决办法:
解决办法:
将每个图片定义成变量,或者将他们存储到数组中,然后为每个Image设置一个独有的Tag,然后去判断Tag是否相等就行。Tag看起来是Object属性,所以应该是Int、String都可以。我这边设置的1、2、3、......
注意事项:
- 判断 Tag 是否相等必须用 Equals 来判断!!!不能用 == 来判断!!!
- 只能定义新变量,给新变量赋值 Image,再给此变量设置 Tag 才有用,直接给原图片资源文件设置 Tag 没用。比如:
// 正确,判断为True
Image image = Properties.Resourse.imageName;
image.tag = 1;
pictureBox.Image = image;
if(pictureBox.Image.Tag.Equals(image.Tag))
{
......
}
// 错误,判断为False
Properties.Resourse.imageName.Tag = 1;
pictureBox.Image = Properties.Resourse.imageName;
if(pictureBox.Image.Tag.Equals(Properties.Resourse.imageName.Tag))
{
......
}
(不定义变量直接设置Tag不知道可不可以,没试过。)