更改事件处理程序

时间:2014-11-25 21:03:50

标签: c# winforms

我有以下场景:我的应用程序有一个正常工作的编译器。用户在屏幕上选择一个控件,并在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);
            };
        }
    }
}

我做错了什么?

1 个答案:

答案 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;
    }
}