如何在不重复每个标签的相同颜色更改行的情况下进行任何标签的颜色更改?

时间:2017-01-20 15:41:12

标签: c# winforms

我有一张带有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

我认为它应该是一两行...而且当更多标签时不会有更多行,但我不知道我怎么能看到如何在一个标签中做到这一点循环!

1 个答案:

答案 0 :(得分:2)

首先,为方便起见,为事件创建一个单独的方法。 其次,当您使用关键字this时,您需要引用表单,而不是发件人标签。在我们的新方法中,sender参数是该标签。 此外,如果您的所有代码都应该执行,则无需检查当前的背景颜色。

private void Label_Clicked(object sender, EventArgs e)
{
     Label clickedLabel = (Label)sender;
     clickedLabel.BackColor = Color.Yellow;
}