添加带有参数的事件,但需要再次删除它们

问题描述 投票:0回答:1

因此,我以某种形式动态创建对象并传递额外的值,这可以使用下面的代码进行。我找不到删除实际有效的点击事件的方法。任何人都知道如何在不删除和重新创建新对象的情况下

向控件添加行为:

foreach (Control c in Controls)
{
    if (c.GetType() == typeof(Button) && c.Name.Length == 7)
    {
        c.Enabled = true;

        //add the event handler, passing the optional string in, reading the letter from the name
        c.Click += (sender2, e2) => ButtonClick(sender2, e2, c.Name.Substring(c.Name.Length - 1, 1));
    }
}

尝试使用此代码删除:

c.Click -= ButtonClick;

我还尝试过使用事件处理程序对象来删除它,但无法让它工作。

当我不向方法传递参数时,我成功地删除了事件,但这会导致其他问题。

如果有人知道如何删除我在上面添加的事件,我将不胜感激。

谢谢

c# winforms event-handling parameter-passing
1个回答
0
投票

您可以使用本地函数。局部函数是嵌套在另一个方法中的方法。它们只能从它们的包含方法中调用。例如下面的

ButtonClick
是一个局部函数:

void ButtonClick(object sender, EventArgs e)
{
    Button button = (Button)sender;
    button.Click -= ButtonClick;
    string suffix = button.Name.Substring(button.Name.Length - 1, 1);
    DoSomething(button, suffix);
}

foreach (Control c in Controls)
{
    if (c is Button && c.Name.Length == 7)
    {
        c.Click += ButtonClick;
        c.Enabled = true;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.