2014-11-25 7 views
-1

У меня следующий сценарий: у моего приложения есть компилятор, который работает правильно. Пользователь выбирает элемент управления на экране и записывает код на 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

вы должны отвязать тот же экземпляр. –

+0

также, пожалуйста, не используйте фрагменты для C#. –

ответ

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; 
    } 
} 
+0

Не работает ... – danielvillage

+0

@ danielvillage Как насчет этого не работает? – Servy

+0

Заявление «private ClickEventHandler обработчик» было невозможно реализовать. Я разрабатываю в WinForms традиционный @Servy – danielvillage

Смежные вопросы