2015-02-07 29 views
2

我想將一些代碼從C#移植到VB.net,並且遇到了一個簡單的事件處理程序問題。將此事件處理程序註冊從C#轉換爲VB.net的正確方法是什麼?

C#:

hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed); 

我都寫過這樣在VB.net:

AddHandler hook.KeyPressed, AddressOf hook_KeyPressed 

但我的轉換缺少在C#代碼KeyPressedEventArgs任何參考,我不當然,如果我這樣做是正確的。任何幫助,將不勝感激。

+0

帖勒瑞族k有一個很好的C#到VD.NET轉換工具,我發現它很有用,也希望你也能做到。 http://converter.telerik.com/ – 2015-02-07 21:31:17

+0

首先重寫C#代碼:'hook.KeyPressed + = hook_KeyPressed;'現在很明顯。 – 2015-02-07 21:36:16

+0

@rontornambe我發現的所有代碼轉換器都無法正確轉換事件處理程序,包括Telerik。用我的帖子中的C#代碼片段自己嘗試一下。它不會打擾使用VB.net的AddHandler。 – user1003916 2015-02-07 21:36:41

回答

4

請記住,一個事件是一個代表。要訂閱事件,事件處理程序的簽名必須與代理相同。只要你的方法有適當的簽名,你就做對了。只要確保您的事件處理程序的EventArgs參數屬於KeyPressedEventArgs類型即可。

C#:

hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed); 

新的C#語法:

hook.KeyPressed += hook_KeyPressed; 

VB.net

AddHandler hook.KeyPressed, AddressOf hook_KeyPressed 

處理器在VB.net:

Sub hook_KeyPressed(ByVal sender As Object, ByVal e As KeyPressedEventArgs) 
    'code here 
End Sub 
+0

這正是我所擁有的,它看起來並不正確,因爲C#代碼註冊了提及KeyPressedEventArgs的事件處理程序,而VB.net代碼卻沒有。我想這是在hook_KeyPressed參數中起作用的嗎? – user1003916 2015-02-07 21:40:07

+1

是的,從技術上講,在C#中你不需要事件參數。在你的例子中,使用新的委託是舊的方式。現在它完成了新的語法: hook.KeyPressed + = hook_KeyPressed; – saegeoff 2015-02-07 21:41:16

相關問題