点击图片框

时间:2011-08-28 11:50:42

标签: 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;
                checkBox3.Checked = true;
            }
            else
            {
                pictureBox94.Image = Properties.Resources.vuoto;
                checkBox3.Checked = false;
            }
        }     

任何错误!

2 个答案:

答案 0 :(得分:4)

重构您的方法以检查天气检查复选框,而不是检查图像权益:

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;
}

答案 1 :(得分:2)

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

您可以通过显示

的结果来测试此行为
(Properties.Resources.vuoto == Properties.Resources.vuoto)

也始终返回false

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

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

其他解决方案是在对象属性中“缓存”图像(即在vuoto类中创建属性selectForm并在构造函数中设置它们一次),或者另一个布尔标志属性,用于存储当前状态。