我的表单有一组可以点击的标签 - 请参阅屏幕截图(播放机侧的标签93到标签21,计算机侧的标签10到22)。
我想要做的就是在单击控件时更改标签颜色。我已经想通了。
我的问题更多是关于清洁代码。而不是
private void Playerlabel_Click(object sender, EventArgs e)
{
lblPlayerCardInt.BackColor = Color.FromArgb(219, 255, 248);
}
private void Playerlabel2_Click(object sender, EventArgs e)
{
lblPlayerCardStrength.BackColor = Color.FromArgb(219, 255, 248);
}
//repeat 5 times and then another 5 times for the computer labels.
有没有办法定义一个方法,这样无论我点击标签还是计算机点击它,都会调用突出显示标签的方法。
我想的是
public void HighlightLabel()
{
foreach (Control x in this.Controls)
{
if (x is Label)
{
((Label)x).BackColor = Color.FromArgb(219, 255, 248);
}
}
}
这是正确的做法吗?这似乎是一个显而易见的问题,但对C#/ OOP编程很新,所以要确保我以正确的方式进行编程。
答案 0 :(得分:2)
是的,您只能为所有这些标签设置1 Click event-handler
:
第1步:
private void lbl_Click(object sender, EventArgs e)
{
Label lbl = sender as Label;
lbl.BackColor = Color.FromArgb(219, 255, 248);
}
第2步:
如果您在设计时创建标签,请对每个标签执行以下操作:
lbl_Click
事件处理程序
醇>
OR
如果您以编程方式创建标签,请改用:
lblPlayerCardInt.Click += new EventHandler(lbl_Click);
lblPlayerCardStrength.Click += new EventHandler(lbl_Click);
...
答案 1 :(得分:2)
看到你正在做的就是每次设置背景颜色为什么不只是有一个方法,并做类似的事情:
private void label_Click(object sender, EventArgs e)
{
Label mylabel = (Label) sender;
mylabel.backcolor = Color.FromArgb(219, 255, 248);
}
然后,您可以将Label_Click作为每个标签的click事件放入,而不是为每个标签执行单独的方法。
但是,如果您想根据标签执行更多操作,可以使用发件人确定单击的标签。像这样:
private void label_Click(object sender, EventArgs e)
{
Label mylabel = (Label) sender;
//Determine which label has been clicked by name or id for example
switch(myLabel.Name)
{
case "lblPlayerCardint":
//Do something
break;
}
}
答案 2 :(得分:1)
您可以将事件发件人对象强制转换为标签
private void label_Click(object sender, EventArgs e)
{
Label lblClicked=sender as Label;
lblClicked.BackColor = Color.FromArgb(219, 255, 248);
}
答案 3 :(得分:0)
您可以使用OfType
作为System.Linq
命名空间的一部分:
foreach(Label lbl in this.Controls.OfType<Label>())
lbl.BackColor = Color.FromArgb(219, 255, 248);
答案 4 :(得分:0)
这应该为您提供帮助,并为表单上的所有标签注册相同的点击事件。
this.Controls
.OfType<Label>()
.AsParallel()
.ForAll(x => x.Click += (o,e) => x.BackColor= Color.FromArgb(219, 255, 248));