有谁可以解释为什么这段代码不起作用?
protected override void OnMouseDoubleClick(MouseEventArgs e)
{
if (this.BackColor == Color.White)
{
this.BackColor = Color.Yellow;
}
else
{
this.BackColor = Color.White;
}
base.OnMouseDoubleClick(e);
}
它工作了几次,但大部分都不起作用。当我删除“if”部分时,它每次都有效,当我用其他代码替换“this.BackColor = Color.Yellow”时,它也有效。 如果有人能说出我做错了什么,我将非常感激。
答案 0 :(得分:3)
它不仅仅在第一次双击时起作用(它可以正常工作但是将颜色设置为白色而不是黄色),因为==
运算符比较颜色的名称和ARGB属性,而不仅仅是ARGB属性。虽然在第一次双击时ARGB值是相同的(ARGB=(255, 255, 255, 255))
,但名称不是因为初始BackColor
属性具有名称“Window”而Color.White具有Name属性“White”的值,因此他们不一样。您可以在调试器中检查自己。
为避免此问题,您可以按如下方式重写代码:
protected override void OnMouseDoubleClick(MouseEventArgs e)
{
//compare ARGB values
if (this.BackColor.ToArgb() == Color.White.ToArgb())
{
this.BackColor = Color.Yellow;
}
else
{
this.BackColor = Color.White;
}
base.OnMouseDoubleClick(e);
}