在 Windows 表单中使用 C# 使数组中的标签在单击时更改背景颜色

Making labels in array change backcolor on click using C# in Windows Forms

如何在单击数组中的标签时更改其背景颜色?由于有多个元素,我无法为每个单独的标签手动激活每个事件。

for (int i = 0; i < 361; i++)
        {
            board[i] = new Label();
            board[i].Parent = pictureBox1;
            board[i].Location = new Point(x, y);
            board[i].Name = "label" + i;
            board[i].BackColor = Color.Black;
            //set size of labels
            board[i].Size = new Size(30, 30);
            //initialize click event handler
            this.board[i].Click += new System.EventHandler(this.labelClick);

        }

private void labelClick (object sender, EventArgs e)
        {
            foreach (Label i in board)
            {
                if (iteration % 2 == 0)
                {
                    i.BackColor = Color.Black;
                    iteration++;
                }
                else if(iteration % 2 == 1)
                {
                    i.BackColor = Color.White;
                    iteration++;
                }
            }
        }
var labels = new[] 
{
    // labels here
};

foreach (var label in labels)
{
    label.Click += (sender, args) =>
       {
           var lbl = sender as Label;
           Debug.Assert(lbl != null);
           lbl.BackColour = Colors.Pink;
       };
}

有几种方法可以解决这个问题。一种方法是将每个 Labels Click 事件连接到同一事件:

this.label1.Click += new System.EventHandler(this.label_Click);
this.label2.Click += new System.EventHandler(this.label_Click);
this.label3.Click += new System.EventHandler(this.label_Click);

在 label_Click 事件中,您可以设置每个标签的背景色或仅设置您点击的标签。

// This will set each label's BackColor to Red.
private void label_Click(object sender, EventArgs e)
{
    foreach (Label label in labelArray)
    {
        label.BackColor = Color.Red;
    }
}

// This will set just the clicked on Label's BackColor to Red.
private void label_Click(object sender, EventArgs e)
{
    Label label = sender as Label;
    if (label != null)
    {
        label.BackColor = Color.Red;
    }
}