如何在VB.NET中添加事件处理程序?

此代码是AjaxControlToolkitSampleSite一部分。 确切地说,它位于AsyncFileUpload控件中:

  AsyncFileUpload1.UploadedComplete += new EventHandler(AsyncFileUpload1_UploadedComplete); 

我怎样才能将其转换为VB.NET?

干得好:

 AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete 

或者,在代码中,您可以从左侧下拉列表中选择AsyncFileUpload1控件(在代码上方),然后从右侧下拉列表中选择UploadComplete事件。

这将使用VB Handles声明自动创建具有正确签名的事件处理程序。

其他人已经展示了如何在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#背景)。