为了账号安全,请及时绑定邮箱和手机立即绑定

将事件设置为数组C#中的对象

将事件设置为数组C#中的对象

C#
慕容3067478 2021-05-14 22:39:35
我有一个标签数组,我想添加鼠标输入,并在这些标签上留下事件。该标签是通过编程方式创建的:            Label [] lblData = new Label[255];        int calcLoc = 0;        for (int i = 0; i <= 200; i++)        {            calcLoc = 25 * i;            lblData[i] = new Label();            lblData[i].Location = new Point(10, calcLoc);            lblData[i].Text = "Test " + i;            InfoPanel.Controls.Add(lblData[i]);        }我尝试过的事情:在循环中设置事件(显然是行不通的)lblData[i].MouseEnter += (sender, e) => {lblData[i].BackColor = Color.LightBlue;};在循环之前设置事件(有可能这样做)lblData[].MouseEnter += (sender, e) => {lblData[].BackColor = Color.LightBlue;};都不起作用。
查看完整描述

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;

}


查看完整回答
反对 回复 2021-05-23
?
阿晨1998

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();


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信