2012-01-12 102 views
3

此代碼是AjaxControlToolkitSampleSite的一部分。準確的說,它是在AsyncFileUpload控制:如何在VB.NET中添加事件處理程序?

AsyncFileUpload1.UploadedComplete += new EventHandler<AsyncFileUploadEventArgs>(AsyncFileUpload1_UploadedComplete); 

如何翻譯這VB.NET?

+5

http://www.developerfusion.com/tools/convert/csharp-to-vb/ – 2012-01-12 19:21:47

+2

@rune該轉換器在這種情況下生成**無效代碼**。它不知道VB.Net AddHandler。正如在重複問題中所報道的那樣。 – MarkJ 2012-01-12 21:39:02

+0

@MarkJ是啊,他們並不完美,但通常是一個不錯的起點,上帝禁止你實際上不得不做一些手工工作:)。除了你的評論是我把它發佈爲評論而不是答案的一部分的原因 – 2012-01-13 09:48:45

回答

5

在這裏你去:

AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete 

或者,你的代碼中,您可以選擇從左邊的下拉列表(只是上面的代碼)的AsyncFileUpload1控制,然後從右鍵選擇UploadComplete事件手下拉列表。

這將使用VB Handles聲明自動創建具有正確簽名的事件處理程序。

+0

謝謝你非常喜歡 – 2012-01-12 19:26:14

+1

不客氣。請記住,當問題的答案解決或幫助您解決問題時,您應該點擊答案旁邊的複選標記,以便未來的問題訪問者知道這是解決您問題的答案。謝謝! – 2012-01-12 19:29:42

0

如果您可以將該代碼放入編譯的C#項目中,則可以使用SharpDevelop將該項目轉換爲VB.NET。這可能是在C#和VB.NET之間進行翻譯的最佳方式。

此外,ILSpy可以寫在C#編譯DLL翻譯成VB.NET

1

其他已經展示瞭如何在字面上翻譯VB到event+=AddHandler

儘管存在相似之處,但VB和C#是不同的語言,並且在逐字地翻譯時,良好的C#代碼可能不是很好的VB代碼。例如,在VB中,規範的方法,以一個固定的事件處理程序附加到ASP.NET控件是通過使用Handles關鍵字:

Protected Sub AsyncFileUpload1_UploadedComplete(sender As Object, _ 
               e As AsyncFileUploadEventArgs) _ 
    Handles AsyncFileUpload1.UploadedComplete 

    ' Your event handler code is here 

End Sub 
0

兩種方法可以做到這一點:

如果您AsyncFileUpload1變量在WithEvents預選賽中,你可以做使用Handles以下關鍵字的事件處理程序本身:

Private Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AsyncFileUploadEventArgs) Handles AsyncFileUpdate1.UploadedComplete 

    'handler logic... 

End Sub 

如果沒有WithEvents預選賽,那麼以下工作:

AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete 

要刪除的事件處理程序,請執行下列操作:

RemoveHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete 

謹防WithEvents/Handles路線的,因爲這可能會導致memory leaks。它只是簡單的語法糖,並在後臺添加了一個AddHandler。我添加這個是因爲我在學習VB(我有一個C#背景)的時候曾經被燒過。

+0

'AddHandler'或C#'+ ='與'WithEvents'一樣(容易受內存泄漏影響)(http://stackoverflow.com/a/621177/15639)。這是完全一樣的問題。沒有理由避免'WithEvents'恕我直言。 – MarkJ 2012-01-13 17:34:49

+0

沒錯,我沒有說這不是可怕的。我只是指出'WithEvents'本質上是一個沒有'RemoveHandler'的'AddHandler',所以像'AddHandler'或'+ ='那樣容易出現內存泄漏。我知道我在C#中編寫代碼時發生內存泄漏,因此我開始計算事件的「+ =」和「 - =」。 'WithEvents'可以使這個檢查在VB中更復雜一點。 – avanek 2012-01-13 19:13:16

相關問題