C# 点击图片框

C# 点击图片框,c#,visual-studio-2010,resources,onclick,C#,Visual Studio 2010,Resources,Onclick,我已经为我的按钮创建了这个代码,但是图像没有改变为什么 private void pictureBox94_Click(object sender, EventArgs e) { if (pictureBox94.Image == Properties.Resources.vuoto) { pictureBox94.Image = Properties.Resources.select;

我已经为我的按钮创建了这个代码,但是图像没有改变为什么

private void pictureBox94_Click(object sender, EventArgs e)
        {
            if (pictureBox94.Image == Properties.Resources.vuoto)
            {
                pictureBox94.Image = Properties.Resources.select;
                checkBox3.Checked = true;
            }
            else
            {
                pictureBox94.Image = Properties.Resources.vuoto;
                checkBox3.Checked = false;
            }
        }     

任何错误

重构您的方法,使其在复选框被选中而不是检查图像时处于选中状态:

private void pictureBox94_Click(object sender, EventArgs e)
{
    if (!checkBox3.Checked)
    {
        pictureBox94.Image = Properties.Resources.select;
    }
    else
    {
        pictureBox94.Image = Properties.Resources.vuoto;
    }

    checkBox3.Checked = !checkBox3.Checked;
}

重构您的方法,使其在复选框是否选中而不是检查图像时处于选中状态:

private void pictureBox94_Click(object sender, EventArgs e)
{
    if (!checkBox3.Checked)
    {
        pictureBox94.Image = Properties.Resources.select;
    }
    else
    {
        pictureBox94.Image = Properties.Resources.vuoto;
    }

    checkBox3.Checked = !checkBox3.Checked;
}

问题是,
Properties.Resources.vuoto
是通过调用
ResourceManager.GetObject
实现的(只需选择它并点击
F12
查看
Resources.Designer.cs
中的实现),每次调用该调用都会返回不同的映像实例。因此,您的
if
条件始终为false

您可以通过显示

(Properties.Resources.vuoto == Properties.Resources.vuoto)
也总是返回
false

因此,解决问题的最简单方法是测试
if
条件中的
checkBox3.Checked
属性

if (!checkBox3.Checked) {
  pictureBox94.Image = Properties.Resources.select;
  checkBox3.Checked = true;
} else {
  pictureBox94.Image = Properties.Resources.vuoto;
  checkBox3.Checked = false;
}

其他解决方案是在对象属性中“缓存”图像(即在
窗体中创建属性
vooto
选择
,并在构造函数中设置一次),或者使用附加的布尔标志属性来存储当前状态。

问题是,
Properties.Resources.vuoto
是通过调用
ResourceManager.GetObject
实现的(只需选择它并点击
F12
查看
Resources.Designer.cs
中的实现),每次调用时都返回不同的映像实例。因此,您的
if
条件始终为false

您可以通过显示

(Properties.Resources.vuoto == Properties.Resources.vuoto)
也总是返回
false

因此,解决问题的最简单方法是测试
if
条件中的
checkBox3.Checked
属性

if (!checkBox3.Checked) {
  pictureBox94.Image = Properties.Resources.select;
  checkBox3.Checked = true;
} else {
  pictureBox94.Image = Properties.Resources.vuoto;
  checkBox3.Checked = false;
}

其他解决方案是在对象属性中“缓存”图像(即在
窗体中创建属性
vuoto
选择
,并在构造函数中设置一次),或者有一个额外的布尔标志属性来存储当前状态。

您是否在
if
语句的开头设置了一个断点,并通过代码跟踪了执行路径?我会预测它总是通过false子句,因此您的图片看起来不会改变。请帮助我false子句是什么?if
语句的
else
部分,如果表达式的计算结果为
false
,则执行该部分。我不相信
=
正在比较图像。可能是在检查它们是否是同一个对象,这永远不会是真的。我不认为-1公平,调用
Properties.Resources.vuoto
总是返回一个新的
图像
实例并不明显(我必须自己检查)。如果不能,代码应该可以工作。对于资源等或多或少“恒定”的属性,这种行为是不可能的,因此其他属性可能会遇到同样的问题。因此,我的+1(我发现这个问题对其他人有用…)您是否在
if
语句的开头设置了一个断点,并通过代码跟踪了执行路径?我会预测它总是通过false子句,因此您的图片看起来不会改变。请帮助我false子句是什么?if
语句的
else
部分,如果表达式的计算结果为
false
,则执行该部分。我不相信
=
正在比较图像。可能是在检查它们是否是同一个对象,这永远不会是真的。我不认为-1公平,调用
Properties.Resources.vuoto
总是返回一个新的
图像
实例并不明显(我必须自己检查)。如果不能,代码应该可以工作。对于资源等或多或少“恒定”的属性,这种行为是不可能的,因此其他属性可能会遇到同样的问题。因此我的+1(我发现这个问题对其他人有用…)