2 回答
TA贡献1883条经验 获得超3个赞
您可以使用单个方法和sender参数。这是经过最少更改的代码。您可以为所有事件设置一个独立的静态方法,然后选中sender。
lblData[i].MouseEnter += (sender, e) => {((Label)sender).BackColor = Color.LightBlue;};
所有Label实例都可以订阅的更安全且速度稍快的版本。
出于以下原因,静态方法的性能更好,您可以避免使用闭包,这可以确保事件由触发Label。
private static void label_MouseEnter(object sender, EventArgs e)
{
var label = sender as Label;
if (label == null)
return;
label.BackColor = Color.LightBlue;
}
TA贡献2037条经验 获得超6个赞
这个怎么样?
Label[] lblData = new Label[255];
int calcLoc = 0;
for (int i = 0; i <= 200; i++)
{
calcLoc = 25 * i;
Label label = new Label();
label.Location = new Point(10, calcLoc);
label.Text = "Test " + i;
label.MouseEnter += (sender, e) =>
{
label.BackColor = Color.LightBlue;
};
InfoPanel.Controls.Add(label);
lblData[i] = label;
}
甚至这个:
Label[] lblData =
Enumerable
.Range(0, 201)
.Select(i =>
{
var calcLoc = 25 * i;
Label label = new Label();
label.Location = new Point(10, calcLoc);
label.Text = "Test " + i;
label.MouseEnter += (sender, e) =>
{
label.BackColor = Color.LightBlue;
};
InfoPanel.Controls.Add(label);
return label;
})
.ToArray();
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报