问题描述
privatevoidlabel1_Click(objectsender,EventArgse){foreach(variteminthis.panel1.Controls){if(sender.Equals(itemasLabel)){if((itemasLabel).BackColor==Color.Turquoise){(itemasLabel).BackColor=Color.Orange;textBox1.Text+=(itemasLabel).Text+"座"+"rn";}elseif((itemasLabel).BackColor==Color.Orange){(itemasLabel).BackColor=Color.Turquoise;stringstr=textBox1.Text.Replace((itemasLabel).Text+"座"+"rn",string.Empty);textBox1.Text=str;}}}}
这样写sender和label是相等的。[code=csharp][/privatevoidlabel1_Click(objectsender,EventArgse){for(inti=0;i<lengthx;i++){for(intj=0;j<lengthy;j++){if(sender.Equals(mylabel[i,j])){if(mylabel[i,j].BackColor==Color.Turquoise){mylabel[i,j].BackColor=Color.Orange;textBox1.Text+=(i+1)+"排"+(j+1)+"座"+"rn";}elseif(mylabel[i,j].BackColor==Color.Orange){mylabel[i,j].BackColor=Color.Turquoise;stringstr=textBox1.Text.Replace((i+1)+"排"+(j+1)+"座"+"rn",string.Empty);textBox1.Text=str;}}}}}code]而这样写就找不到相等的label实例,为什么呢?
解决方案
解决方案二:
1、Equals有两种概念,一种是数值相等(针对值类型以及String类型变量,String是特殊的引用类型),另外一种是引用同一个地址的等同2、sender.Equals(itemasLabel),这里就是引用同一个对象实例的等同3、sender.Equals(mylabel[i,j]),mylabel数组元素,很显然和Panel中的Label不是一个存储空间