使数组中的标签在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;
}
}