Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事件处理程序问题_C#_Vb.net - Fatal编程技术网

C# 事件处理程序问题

C# 事件处理程序问题,c#,vb.net,C#,Vb.net,我在网上找到了一些C#代码。我使用telerik代码转换器将其转换为VB.net。我得到了以下代码的错误 Closed已在此类中声明为“public-Even-Closed(发件人作为对象,e作为System.EventArgs)” 同样的错误也会发生在显示的。有人有什么想法要解决吗 #Region "Events" Public Event Closed As EventHandler Public Event Shown As EventHandler Prote

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

Closed已在此类中声明为“public-Even-Closed(发件人作为对象,e作为System.EventArgs)”

同样的错误也会发生在显示的。有人有什么想法要解决吗

 #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
这是我转换成VB的C代码

#region Events
    public event EventHandler Closed;
    public event EventHandler Shown;

    protected virtual void closed(EventArgs e)
    {
        EventHandler handler = Closed;

        if (handler != null) handler(this, e);
    }

    protected virtual void shown(EventArgs e)
    {
        EventHandler handler = Shown;

        if (handler != null) handler(this, e);
    }
    #endregion

这里有两个问题

首先,如果您使用的是WinForms,
System.Windows.Forms
已经有
关闭的
事件,该事件与您正在创建的事件冲突。因此,如果打算对事件进行阴影处理,则必须通过声明
阴影
对事件进行阴影处理。但是,如果您是在普通类(不是从
表单
派生的)中声明它,您就不必担心它

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

在我看来,这是一个事实的结果,即一项
shown
等同于一项
shown


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

发布原始C#代码。以及您得到的(编译器?)错误或堆栈跟踪。。。目前只是猜测问题是什么…@ScottChamberlain他已经做了“我在下面的代码中得到了一个错误,Closed在这个类中已经声明为“public-Even-Closed(Sender作为对象,e作为System.EventArgs)”。@Marshal我没有意识到这是一条错误消息,我以为他是在说他已经实现了Close方法,但它仍然不起作用。
甚至
??这不应该是
事件吗
?不,在这种情况下,C#/VB.NET将要求创建一个
新事件…
,您可以(我知道这是一个糟糕的设计决策)在继承路径中有多个项共享相同的名称。是的,但是如果有意隐藏,则应该隐藏它。如果不打算隐藏,他应该更改事件名称,如
关闭时
关闭时
。@Steve:你说的“尝试”是什么意思,你的代码区分大小写了吗?请用新的详细信息更新您的问题。。。