2010-08-15 69 views
2

我一直在試圖弄清楚如何向使用Codedom的方法添加處理程序,但我並沒有走得太遠。如何通過Codedom實現「句柄」

我想通過CodeDom中重現的方法是:

Private Sub Startup() Handles btnStart.Click 
    ''# Do work 
End Sub 

的方法是很容易與創造:

Dim StartupMethod As New CodeMemberMethod 
StartupMethod.Name = "Startup" 
StartupMethod.Attributes = MemberAttributes.Private 

但我無法弄清楚如何添加Handles btnStart.Click。我已經看過CodeAttachEventStatement,但是我不相信它可以在方法上做Handles

有誰知道如何做到這一點?

編輯:下面的解決方案適用於VB,但不適用於C#,因爲處理程序正在尋找處理事件而不是方法。

回答

3

把手只是一個語法糖vb.net爲您提供方便。 引擎蓋下將它轉換成:

AddHandler btnStart.Click, AddressOf Startup 

所以我認爲這將是不可能的。你應該嘗試使用CodeAttachEvent語句,而不是

http://msdn.microsoft.com/en-us/library/system.codedom.codeattacheventstatement.aspx

另一種可能性是使用CodeSnippetTypeMember()這裏描述

Workaround for VB.NET partial method using CodeDom?

+0

所以你說我應該使用上述初始化處理程序,就像在構造函數New()語句中一樣? – 2010-08-15 14:21:50

+0

+1,是的,生成構造函數並使用CodeAttachEventStatement。 – 2010-08-15 15:01:53

+0

是的,我還沒有做過,但我敢打賭,如果你在反射器中檢查你的'Handles ...'代碼,你會在New()構造函數中找到AddHandler方法。 – 2010-08-15 15:30:55