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

使数组中的标签在Windows窗体中使用C#单击时更改背景色,c#,arrays,label,C#,Arrays,Label,单击阵列中标签时,如何更改其背景色?由于有多个元素,我无法为每个标签手动激活每个事件 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"

单击阵列中标签时,如何更改其背景色?由于有多个元素,我无法为每个标签手动激活每个事件

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++;
                }
            }
        }
for(int i=0;i<361;i++)
{
板[i]=新标签();
板[i]。父级=pictureBox1;
板[i]。位置=新点(x,y);
单板[i].Name=“label”+i;
板[i]。背景色=颜色。黑色;
//设置标签的大小
板[i]。尺寸=新尺寸(30,30);
//初始化单击事件处理程序
this.board[i].Click+=newsystem.EventHandler(this.labelClick);
}
私有无效标签单击(对象发送方,事件参数e)
{
foreach(板上的标签i)
{
如果(迭代%2==0)
{
i、 背景色=颜色。黑色;
迭代++;
}
else if(迭代%2==1)
{
i、 背景色=颜色。白色;
迭代++;
}
}
}

有几种方法可以解决这个问题。一种方法是将每个标签单击事件关联到同一事件:

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;
    }
}

@user1925801根据您的编辑历史记录,您可能已经解决了问题。我不清楚你的目标结果是什么。是否希望表单加载所有透明标签,然后当用户单击任何标签时,所有标签都将变成棋盘格图案?问题已解决。我的for循环中有一些不应该出现的东西(没有图片)。也不知道透明真的意味着父元素的背景色。因此,我去掉了作为背景图像的picturebox,取而代之的是我将表单本身的背景图像和标签设置为backcolor=transparent,并得到了我的解决方案。
// 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;
    }
}