【问题标题】:How to add an event handler in VB.NET? [closed]如何在 VB.NET 中添加事件处理程序? [关闭]
【发布时间】:2012-02-09 02:10:31
【问题描述】:

此代码是AjaxControlToolkitSampleSite 的一部分。准确的说是在AsyncFileUpload控件中:

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

如何将其翻译成 VB.NET?

【问题讨论】:

  • @rune 在这种情况下,转换器会生成无效代码。它不知道 VB.Net AddHandler。正如关于重复问题的报道。
  • @MarkJ 是的,它们并不完美,但通常是一个很好的起点,上帝禁止你实际上必须做一些手工工作:)。把你的评论放在一边开玩笑是我把它作为评论而不是答案的一部分发布的原因
  • @RuneFS 但是,如果您只发布链接而没有解释,大多数人会认为您的意思是转换器可以自动解决原始问题。我希望这是现在支持您的评论的五个人所做的假设。而事实上对于这个问题,转换器真的很无用,几乎令人尴尬
  • @MarkJ 我不会称之为少用。当我不得不从 C# 转换为 V.NEt 时,该转换器帮助我解决了这个问题,但我又一次只希望它能让我开始(而且我确信 OP 也有不止一行代码)跨度>

标签: c# vb.net code-translation


【解决方案1】:

给你:

AddHandler AsyncFileUpload1.UploadedComplete, AddressOf AsyncFileUpload1_UploadedComplete

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

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

【讨论】:

  • 不客气。请记住,当某个问题的答案解决或帮助您解决问题时,您应该单击答案旁边的复选标记,以便该问题的未来访问者知道这是解决您问题的答案。谢谢!
【解决方案2】:

其他人已经展示了如何在 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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      两种方法:

      如果您的 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# 背景)时已经被它烧死了。

      【讨论】:

      • AddHandler 或 C# +=vulnerable to memory leaksWithEvents 一样。这是完全相同的问题。不是避免WithEvents恕我直言的理由。
      • 对,我没有说它不可用。我刚刚指出WithEvents 本质上是一个没有RemoveHandlerAddHandler,所以它很容易像AddHandler+= 一样出现内存泄漏。我知道当我在 C# 中编写代码并且出现内存泄漏时,我开始计算 +=-= 的事件。 WithEvents 可以让这个检查在 VB 中稍微复杂一些。
      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多