【发布时间】:2020-11-08 06:51:07
【问题描述】:
我在 C# 中遇到问题,我的代码必须检测到每个 pictureBox 都有相同的图像,然后执行一个处理。但是我的代码运行不正常。 我正在使用 .Net Framework 4.8 和 WinForms。
事件:Button1_Click
代码:
string Location = Application.StartupPath.ToString();
if (pictureBox1.BackgroundImage == Properties.Resources.tick &&
pictureBox2.BackgroundImage == Properties.Resources.tick &&
pictureBox3.BackgroundImage == Properties.Resources.tick &&
pictureBox4.BackgroundImage == Properties.Resources.tick &&
pictureBox5.BackgroundImage == Properties.Resources.tick)
{
if (File.Exists(Location + "\\files\\e.etf"))
{
File.Delete(Location + "\\files\\e.etf");
}
if (File.Exists(Location + "\\files\\n.etf"))
{
File.Delete(Location + "\\files\\n.etf");
}
if (File.Exists(Location + "\\files\\p.etf"))
{
File.Delete(Location + "\\files\\p.etf");
}
}
else
{
MessageBox.Show("Error");
}
但是每当我点击按钮n它总是显示MessageBox显示“错误”。请帮助我。 提前谢谢你。 ????
【问题讨论】:
-
Resources是一家工厂。它每次都会创建一个新对象,因此 a) 小 sn-p 正在创建许多从未处理过的图像 b) 新创建的对象永远不会等于旧对象。将图像缓存在一个变量(或数组,如果有很多)中并从那里进行比较和分配 -
但这并不重要,但是:使用&& for logical AND。它是用于此用途的操作员,并且正在短路。应谨慎使用“bool & bool”,例如在必须计算所有表达式时或在其他高度专业化的代码中。
-
@user2864740 我用过 && 但它也不起作用。 ??????????
-
我正在处理 pictureBox BackgroundImage 但创建一个新的。但问题仍然存在。
-
您不能这样做
pictureBox1.BackgroundImage == Properties.Resources.tick有几个原因。一是 Image 或 BackgroundImage 无法与任何其他位图进行比较。相反,您应该在加载这些图像时存储名称或 ID! - (它们是引用变量,它们总是有不同的引用/地址)
标签: c# if-statement conditional-statements