我試圖通過傳遞的自定義參數動態創建自定義事件處理程序。基本上,我有添加了點擊事件面板:需要幫助 - 使用自定義參數動態單擊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());
一切都在紅色下劃線稱「方法沒有超載'預覽獎勵'需要1個參數」。我想我不理解lambda是如何工作的,因爲我認爲(發送者,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'方法,而不是讓我創建一個同名的新'私人對象'方法......我徹底困惑了!任何幫助將非常感激!
我有一個「解決方案」,但我真的很想學習這個lambda表達式的東西!所以,我仍然在尋找答案,但是,這裏是我的解決方案: 我創建了一個自定義類並添加了所有想要傳遞的變量: class MyPanel:System.Windows.Controls.Panel { public int id; public string imgString; } 正常使用EventHandler: awardButton.Click + = new EventHandler(PreviewAward); 在我的預覽獎勵方法中: string str =((Panel)sender)。名稱; int id =((Panel)sender).id; string imgStr =((Panel)sender).imgString; – 2013-03-12 16:05:20
糾錯: System.Windows.Controls.Panel = System.Windows.Forms.Panel – 2013-03-12 16:12:36