2015-12-23 2 views
2

Так что я сейчас пытаюсь получить просто корзину, работающую на веб-сайте. В основном, поскольку элементы отображаются из вашей корзины на странице корзины, панель заполняется изображениями, ярлыками и кнопками, относящимися к каждому из них.Добавление события клика к динамически сгенерированной кнопке в C#

Что я хочу сделать, это назначить событие щелчка каждой созданной кнопке, которая вызывает общий метод для удаления этого элемента из списка. Вот код для удаления элемента из ArrayList пунктов:

public void Remove(CartItem item) 
{ 
    ArrayList remove = (ArrayList)Session["ShoppingBasket"]; 
    remove.Remove(item); 
} 

Это обработчик событий я пытаюсь код для каждой кнопки, которая сгенерирована:

btnRemove.Click += new EventHandler(Remove(item)); 

По какой-то причине об ошибке появляется сообщение о том, что в приведенной выше строке кода ожидается имя метода, и я не вижу, где я ошибаюсь. Я не слишком хорошо знаком с использованием объекта EventHandler, поэтому любое руководство было бы очень благодарным.

ответ

3

EventHandler должен соответствовать сигнатуре события. Вы не можете просто передать какой-либо метод в качестве EventHandler. Вам нужна правильная пустота, соответствующая сигнатуре события.

Вы можете вместо этого попытаться лямбда-выражение:

btnRemove.Click += (_sender, _args) => Remove(item); 

Вы могли бы использовать отдельный метод, но так как вы должны передать item функции Remove, вам нужно использовать, чтобы использовать лямбда-выражения, чтобы быть способный к доступу item в контексте.

+0

'новый EventHandler' является излишним. Упростите это следующим образом: 'btnRemove.Click + = (s, e) => Удалить (item);' –

+0

@ user2946329 Да. Я просто скопировал его из оригинального сообщения. –

+0

Я пробовал этот метод, но теперь его проблема с параметром EventArgs. он говорит: «e нельзя объявить в этой области, потому что это имя используется в закрывающей локальной области для определения локального или параметра». Должен ли я использовать другое имя для «e»? –

0

Попробуйте это.

btnRemove.Click + = (е, с) => удалить (пункт)

+0

Разве этот ответ уже не существует? –

+0

o да, я просто запускаю IDE, чтобы проверить его синтаксически, в то время как другой опубликованный ответ. – tchelidze

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