我正在尝试使用传递的自定义参数动态创建自定义事件处理程序。基本上,我有一个添加了点击事件的面板:
Panel awardButton = new Panel();
awardButton.Click += new EventHandler(PreviewAward);
我想向我的 PreviewAward 函数发送一些变量。我尝试了我所知道的一切,但除了错误一无所获。我尝试寻求帮助,这是我能找到的最接近的:
我尝试使用该代码如下:
awardButton.Click += (sender, e) => PreviewAward(dtAward.Rows[0]["iconImage"].ToString());
lambda 右侧的所有内容都用红色下划线表示“方法 'PreviewAward' 没有重载需要 1 个参数”。我想我不明白 lambda 是如何工作的,因为我认为 (sender, e) 与我的“iconImage”字符串一起被传递到 PreviewAward 方法中,总共有 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);
}
当我将鼠标悬停在 lambda 右侧的函数上时,我会看到“PreviewAward”上的小下拉菜单,它希望我创建一个方法存根。如果我点击它,它会创建这个:
private object PreviewAward(string p)
{
throw new NotImplementedException();
}
我不知道该怎么办,尤其是它没有我的“发件人”。我的印象是它会使用我已经创建的“private void PreviewAward”方法,而不是让我创建一个新的同名“私有对象”方法……我完全糊涂了!任何帮助将非常感激!