我有一张带有3个标签的表格。
我有这段代码
private void Form1_Load(object sender, EventArgs e)
{
//drawn 3 labels.
List<Label> lstlabels = new List<Label>() { label1, label2, label3 };
int cnt = lstlabels.Count;
for (int i = 0; i < cnt; i++) lstlabels[i].Click += (object se, EventArgs ee) => { if (this.BackColor == SystemColors.Control) this.BackColor = Color.Yellow; };
}
它没有做我想做的事情......我知道为什么,但我不知道如何让它做我想做的事。
我想要的是,当我点击标签时,它会变黄。
代码正在做的是,当我点击标签时,整个表单变黄。
我知道它为什么这样做。这是因为&#39;这个&#39;指的是表格而不是点击的标签。
我想改变这个&#39;指向被点击的标签的东西。喜欢不一定改变这个&#39;,但是使用其他东西代替这个,那会做到这一点,但我不知道怎么做。
我可以尝试改变这个&#39;到lstlabels [i]但是那也没有工作......我理解为什么它不会起作用......它给出一个索引超出范围的错误。我理解为什么。我知道在点击标签的时候,i == 3,所以我不在界限内,也没有说明点击了什么标签。所以我只是不知道该怎么做。
我能做到
label1.Click += (object se, EventArgs ee) => { if (label1.BackColor == SystemColors.Control) label1.BackColor = Color.Yellow; };
label2.Click += (object se, EventArgs ee) => { if (label2.BackColor == SystemColors.Control) label2.BackColor = Color.Yellow; };
label3.Click += (object se, EventArgs ee) => { if (label3.BackColor == SystemColors.Control) label3.BackColor = Color.Yellow; };
或
lstlabels[0].Click += (object se, EventArgs ee) => { if (label1.BackColor == SystemColors.Control) label1.BackColor = Color.Yellow; };
lstlabels[1].Click += (object se, EventArgs ee) => { if (label2.BackColor == SystemColors.Control) label2.BackColor = Color.Yellow; };
lstlabels[2].Click += (object se, EventArgs ee) => { if (label3.BackColor == SystemColors.Control) label3.BackColor = Color.Yellow; };
如果有25个标签,那么就有25行......
但我猜它应该是一两行。
标签可能不是label1,label2和label3,它们可能是lblBob,lblJohn,lblAndy
我认为它应该是一两行...而且当更多标签时不会有更多行,但我不知道我怎么能看到如何在一个标签中做到这一点循环!
答案 0 :(得分:2)
首先,为方便起见,为事件创建一个单独的方法。
其次,当您使用关键字this
时,您需要引用表单,而不是发件人标签。在我们的新方法中,sender
参数是该标签。
此外,如果您的所有代码都应该执行,则无需检查当前的背景颜色。
private void Label_Clicked(object sender, EventArgs e)
{
Label clickedLabel = (Label)sender;
clickedLabel.BackColor = Color.Yellow;
}