4

此代码是AjaxControlToolkitSampleSite. 确切地说,它在AsyncFileUpload控制中:

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

我怎样才能把它翻译成 VB.NET?

4

4 回答 4

8

干得好:

AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete

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

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

于 2012-01-12T19:22:40.160 回答
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
于 2012-01-12T19:26:48.933 回答
0

如果您可以将该代码放入可编译的 C# 项目中,则可以使用SharpDevelop将该项目转换为 VB.NET 。这可能是在 C# 和 VB.NET 之间进行转换的最佳方式。

此外,ILSpy可以将用 C# 编写的已编译 dll 翻译成 VB.NET

于 2012-01-12T19:24:06.817 回答
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路由,因为这会导致内存泄漏。它只是语法糖,并在幕后连接了 AddHandler。我添加这个是因为我之前在学习 VB(我有 C# 背景)时已经被它烧毁了。

于 2012-01-12T19:30:54.640 回答