事件处理程序问题

时间:2016-01-05 21:04:50

标签: c# vb.net

我在网上发现了一些C#代码。我使用telerik代码转换器转换为VB.net。我收到以下代码的错误

  

已关闭已声明为' public甚至已关闭(发件人为对象,e为System.EventArgs)'在这堂课上。

同样的错误也适用于所示。任何人都有一些想法要解决?

language: objective-c
osx_image: xcode7.2
xcode_workspace: VirtualGameController.xcworkspace
xcode_scheme:
- VirtualGameControllerIOS
- VirtualGameControllerOSX
- VirtualGameControllerTvOS
- VirtualGameControllerWatchOS
xcode_sdk:
- iphonesimulator9.2
- macosx10.11
- tvos9.0
- watchos2.0
matrix:
     exclude:
           - xcode_scheme: VirtualGameControllerIOS
             xcode_sdk: macosx10.11
           - xcode_scheme: VirtualGameControllerIOS
             xcode_sdk: tvos9.0
           - xcode_scheme: VirtualGameControllerIOS
             xcode_sdk: watchos2.0
           - xcode_scheme: VirtualGameControllerOSX
             xcode_sdk: iphonesimulator9.2
           - xcode_scheme: VirtualGameControllerOSX
             xcode_sdk: tvos9.0
           - xcode_scheme: VirtualGameControllerOSX
             xcode_sdk: watchos2.0
           - xcode_scheme: VirtualGameControllerTvOS
             xcode_sdk: macosx10.11
           - xcode_scheme: VirtualGameControllerTvOS
             xcode_sdk: tvos9.0
           - xcode_scheme: VirtualGameControllerTvOS
             xcode_sdk: watchos2.0
           - xcode_scheme: VirtualGameControllerWatchOS
             xcode_sdk: iphonesimulator9.2
           - xcode_scheme: VirtualGameControllerWatchOS
             xcode_sdk: tvos9.0
           - xcode_scheme: VirtualGameControllerWatchOS
             xcode_sdk: watchos2.0

这是我转换为VB的C#代码。

 #Region "Events"
    Public Event Closed As EventHandler
    Public Event Shown As EventHandler

    Protected Overridable Sub closed(e As EventArgs)
        Dim handler As EventHandler = Closed

        RaiseEvent handler(Me, e)
    End Sub

    Protected Overridable Sub shown(e As EventArgs)
        Dim handler As EventHandler = Shown

        RaiseEvent handler(Me, e)
    End Sub
#End Region

2 个答案:

答案 0 :(得分:2)

在我看来,这是因为VB.NET is case insensitive意味着项目shown等同于项目Shown这一事实的结果。

您可以通过重命名(更好地使用某些重构工具)其中一个事件来解决问题,这样就不会出现名称冲突。您在C#项目级别更好地执行此操作,然后再次运行转换编译器工具以生成等效的VB.NET代码。

答案 1 :(得分:1)

这里有两个问题。

首先,如果您使用的是WinForms,System.Windows.Forms已经有Closed事件与您正在创建的事件冲突。因此,如果打算使用阴影,则必须通过声明Shadows来影响事件。但是如果你在正常的课堂上宣布这一点(它不是从Form派生出来的话)你就不用担心了。

Public Shadows Event Closed As EventHandler
Public Shadows Event Shown As EventHandler

其次,属性名称和事件名称不能相同。 Vb.Net在这个问题上不区分大小写。因此,您应该按如下方式重构名称。

Public Event Closed As EventHandler
Public Event Shown As EventHandler

Protected Overridable Sub whenClosed(ByVal e As EventArgs)
    RaiseEvent Closed(Me, e)
End Sub

Protected Overridable Sub whenShown(ByVal e As EventArgs)
    RaiseEvent Shown(Me, e)
End Sub