首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环内被覆盖的LinkLabel单击事件

循环内被覆盖的LinkLabel单击事件
EN

Stack Overflow用户
提问于 2014-10-15 10:56:25
回答 1查看 90关注 0票数 0

下面是一些示例代码,它们指出了我的问题。它添加了5个LinkLabel,每个都有一个Click事件处理程序。标签上的文本是1...5,单击时应该会显示相同的结果,但当我单击每个标签时,我会得到相同的消息: 5。

这就像是最后一个处理程序覆盖了每个其他标签上的处理程序。我认为我已经通过在循环的每次迭代中创建一个新的EventHandler和新的LinkLabel来避免这种情况。

我将每个LinkLabel添加到一个FlowLayoutPanel中。

为什么我会得到这样的结果,我如何修复它?

代码语言:javascript
复制
List<Test> objects = new List<Test>();
for (int i = 0; i < 5; i++)
{
    objects.Add(new Test(i + 1));
}

foreach (Test t in objects)
{
    LinkLabel label = new LinkLabel();
    label.AutoSize = true;
    label.Text = t.a + "";

    label.Click += new EventHandler((sender, args) =>
    {
        MessageBox.Show(t.a + "");
    });

    flowLayoutPanel1.Controls.Add(label);
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-15 11:17:24

在我尝试用代码重现您描述的问题时,链接标签1到5在单击时分别显示1到5,就像您想要的那样。

以下是一个独立的示例,它最小限度地构建于您发布的代码之上(只是为了使其构建和运行所需的程度)...and按预期工作:

代码语言:javascript
复制
// FORNOW: Added Main method for PoC.
void Main()
{
    // FORNOW: Added necessary Form and FlowLayoutPanel locals.
    Form form1 = new Form();
    FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();

    List<Test> objects = new List<Test>();
    for (int i = 0; i < 5; i++)
    {
        objects.Add(new Test(i + 1));
    }

    foreach (Test t in objects)
    {
        LinkLabel label = new LinkLabel();
        label.AutoSize = true;
        label.Text = t.a + "";

        label.Click += new EventHandler((sender, args) =>
        {
            MessageBox.Show(t.a + "");
        });

        flowLayoutPanel1.Controls.Add(label);
    }

    // FORNOW: Added necessary control wiring and display call.
    form1.Controls.Add(flowLayoutPanel1);
    form1.Show();
}

// FORNOW: Added a Test class based on the OP's code.
public class Test
{
    public int a { get; set; }

    public Test(int a)
    {
        this.a = a;
    }
}

您可能在使用的其他代码中有问题,但您共享的代码根据您所说的预期运行良好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26373741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档