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(我发现这个问题对其他人有用…)