此代码是AjaxControlToolkitSampleSite
. 确切地说,它在AsyncFileUpload
控制中:
AsyncFileUpload1.UploadedComplete += new EventHandler<AsyncFileUploadEventArgs>(AsyncFileUpload1_UploadedComplete);
我怎样才能把它翻译成 VB.NET?
此代码是AjaxControlToolkitSampleSite
. 确切地说,它在AsyncFileUpload
控制中:
AsyncFileUpload1.UploadedComplete += new EventHandler<AsyncFileUploadEventArgs>(AsyncFileUpload1_UploadedComplete);
我怎样才能把它翻译成 VB.NET?
干得好:
AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete
或者,在您的代码中,您可以AsyncFileUpload1
从左侧下拉列表(代码上方)中选择控件,然后UploadComplete
从右侧下拉列表中选择事件。
Handles
这将使用 VB声明自动创建具有正确签名的事件处理程序。
其他人已经展示了如何在 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
如果您可以将该代码放入可编译的 C# 项目中,则可以使用SharpDevelop将该项目转换为 VB.NET 。这可能是在 C# 和 VB.NET 之间进行转换的最佳方式。
此外,ILSpy可以将用 C# 编写的已编译 dll 翻译成 VB.NET
有两种方法可以做到这一点:
如果您的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
路由,因为这会导致内存泄漏。它只是语法糖,并在幕后连接了 AddHandler。我添加这个是因为我之前在学习 VB(我有 C# 背景)时已经被它烧毁了。