我有以下场景:我的应用程序有一个正常工作的编译器。用户在屏幕上选择一个控件,并在C#中为该控件编写代码。在数据库中记录之前,如果在为控件编写的代码之前发生此事件,或者您编写的代码优先于系统代码,则用户可以选择。我的实际代码:
public void ExecutaCodigo (string codigo)
{
ExecuteSnippetUser(codigo);
}
public void AtribuiEvento(Control c, string evento, string codigo, bool prioritario)
{
evento = evento.ToLower();
if(evento == "click")
{
if (!prioritario)
{
c.Click += delegate(Object sender, EventArgs e)
{
ExecuteSnippetUser(codigo);
// works fine!!! application and after, user code
};
}
else
{
c.Click -= delegate(Object sender, EventArgs e)
{
};
c.Click += delegate(Object sender, EventArgs e)
{
ExecuteSnippetUser(codigo);
};
}
}
}
我做错了什么?
答案 0 :(得分:1)
您必须保留对以前可以删除它的处理程序的引用:
private ClickEventHandler handler;
public void AtribuiEvento(Control c, string evento, string codigo, bool prioritario)
{
evento = evento.ToLower();
if(evento == "click")
{
c.Click -= handler;
handler = delegate(Object sender, EventArgs e)
{
ExecuteSnippetUser(codigo);
};
c.Click += handler;
}
}