2012-01-12 47 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

相关问题