因此,我以某种形式动态创建对象并传递额外的值,这可以使用下面的代码进行。我找不到删除实际有效的点击事件的方法。任何人都知道如何在不删除和重新创建新对象的情况下
向控件添加行为:
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;
我还尝试过使用事件处理程序对象来删除它,但无法让它工作。
当我不向方法传递参数时,我成功地删除了事件,但这会导致其他问题。
如果有人知道如何删除我在上面添加的事件,我将不胜感激。
谢谢
您可以使用本地函数。局部函数是嵌套在另一个方法中的方法。它们只能从它们的包含方法中调用。例如下面的
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;
}
}