Я пытаюсь динамически создать специальный обработчик событий с простыми переданными аргументами. В принципе, у меня есть панель с событием щелчка добавил:Нужна помощь - Динамический клик EventHandler с настраиваемыми аргументами - Выражение Lambda
Panel awardButton = new Panel();
awardButton.Click += new EventHandler(PreviewAward);
Я хочу отправить несколько переменных в моей функции PreviewAward. Я пробовал все, что знаю, но не получал ничего, кроме ошибок. Я пытался искать помощи, и это ближе всего я мог бы найти:
EventHandler with custom arguments
Я попытался с помощью этого кода следующим образом:
awardButton.Click += (sender, e) => PreviewAward(dtAward.Rows[0]["iconImage"].ToString());
Все на правой стороне лямбда указывается в красном говоря: «Нет перегрузки для метода« PreviewAward »принимает 1 аргумент». Я думаю, я не понимаю, как работает лямбда, потому что я думал, что (отправитель, e) передается в метод PreviewAward вместе с моей строкой «iconImage», в результате чего всего 3 аргумента, а не один. Кроме того, я попытался добавить переменную в свой метод, но получить ту же ошибку. Вот метод:
private void PreviewAward(object sender, EventArgs e, string slot)
{
string str = ((Panel)sender).Name;
MemoryStream ms = new MemoryStream(Utils.StrToByteArray(str));
MemoryStream preview = new MemoryStream(Utils.ImageMerge(((System.Drawing.Image)(Avatar.Properties.Resources.resizeButtonIn)), Image.FromStream(ms), 200, 200));
Debug.Print("Show Preview for item: " + str);
}
Когда я мыши над функцией на правой стороне лямбды, я получаю немного раскрывающийся на «PreviewAward», который хочет меня создать метод заглушку. Если я нажимаю, что он создает это:
private object PreviewAward(string p)
{
throw new NotImplementedException();
}
Я понятия не имею, что делать с этим, особенно в том, что он не имеет мой «отправителя» в нем. У меня создалось впечатление, что он будет использовать метод private void PreviewAward, который я уже создал, вместо того, чтобы создать мне новый метод «private object» с тем же именем ... Я полностью смущен! Любая помощь приветствуется!
У меня есть «решение», но я действительно хочу изучить этот материал выражения лямбда! Итак, я все еще ищу ответ на этот вопрос, но вот мое решение: Я создал пользовательский класс и добавил все переменные, которые хочу передать: класс MyPanel: System.Windows.Controls.Panel { public int id; публичная строка imgString; } Использовать EventHandler как обычно: awardButton.Click + = new EventHandler (PreviewAward); В моем режиме PreviewAward: string str = ((Panel) отправитель).Имя; int id = ((Panel) отправитель) .id; строка imgStr = ((Panel) отправитель) .imgString; –
Исправление: System.Windows.Controls.Panel = System.Windows.Forms.Panel –