C# C-定义标签的方法而不指定标签名称
我有一个表单,它有一组可以点击的标签-参见屏幕截图标签93到标签21在播放器端和标签10到22在计算机端 我只想在单击控件时更改标签的背面颜色。这是我想出来的 我的问题更多的是关于干净的代码。而不是C# C-定义标签的方法而不指定标签名称,c#,foreach,label,C#,Foreach,Label,我有一个表单,它有一组可以点击的标签-参见屏幕截图标签93到标签21在播放器端和标签10到22在计算机端 我只想在单击控件时更改标签的背面颜色。这是我想出来的 我的问题更多的是关于干净的代码。而不是 private void Playerlabel_Click(object sender, EventArgs e) { lblPlayerCardInt.BackColor = Color.FromArgb(219, 255, 248); }
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编程来说是一个新手,因此希望确保我的方法正确。您可以使用系统的一部分。Linq命名空间:
foreach(Label lbl in this.Controls.OfType<Label>())
lbl.BackColor = Color.FromArgb(219, 255, 248);
您可以使用System.Linq命名空间的一部分:
foreach(Label lbl in this.Controls.OfType<Label>())
lbl.BackColor = Color.FromArgb(219, 255, 248);
您可以将事件发送者对象强制转换为标签
private void label_Click(object sender, EventArgs e)
{
Label lblClicked=sender as Label;
lblClicked.BackColor = Color.FromArgb(219, 255, 248);
}
您可以将事件发送者对象强制转换为标签
private void label_Click(object sender, EventArgs e)
{
Label lblClicked=sender as Label;
lblClicked.BackColor = Color.FromArgb(219, 255, 248);
}
是,您只能为所有这些标签设置一个单击事件处理程序:
步骤1:
步骤2:
如果在设计时创建标签,请对每个标签执行以下操作:
在表单设计器上,选择标签,然后打开视图>属性>事件选项卡
从下拉列表中选择上面的lbl\u单击事件处理程序
或
如果以编程方式创建标签,请改用以下方法:
lblPlayerCardInt.Click += new EventHandler(lbl_Click);
lblPlayerCardStrength.Click += new EventHandler(lbl_Click);
...
是,您只能为所有这些标签设置一个单击事件处理程序:
步骤1:
步骤2:
如果在设计时创建标签,请对每个标签执行以下操作:
在表单设计器上,选择标签,然后打开视图>属性>事件选项卡
从下拉列表中选择上面的lbl\u单击事件处理程序
或
如果以编程方式创建标签,请改用以下方法:
lblPlayerCardInt.Click += new EventHandler(lbl_Click);
lblPlayerCardStrength.Click += new EventHandler(lbl_Click);
...
既然您每次都在设置背景色,为什么不使用一种方法并执行以下操作:
private void label_Click(object sender, EventArgs e)
{
Label mylabel = (Label) sender;
mylabel.backcolor = Color.FromArgb(219, 255, 248);
}
然后,您可以将Label_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;
}
}
既然您每次都在设置背景色,为什么不使用一种方法并执行以下操作:
private void label_Click(object sender, EventArgs e)
{
Label mylabel = (Label) sender;
mylabel.backcolor = Color.FromArgb(219, 255, 248);
}
然后,您可以将Label_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;
}
}
这应该可以为您实现这一点,并为表单上的所有标签注册相同的单击事件
this.Controls
.OfType<Label>()
.AsParallel()
.ForAll(x => x.Click += (o,e) => x.BackColor= Color.FromArgb(219, 255, 248));
这应该可以为您实现这一点,并为表单上的所有标签注册相同的单击事件
this.Controls
.OfType<Label>()
.AsParallel()
.ForAll(x => x.Click += (o,e) => x.BackColor= Color.FromArgb(219, 255, 248));
谢谢,非常感谢-我想这有助于搜索。-非常感谢,我想这对搜索很有帮助-