C# 事件处理程序问题
我在网上找到了一些C#代码。我使用telerik代码转换器将其转换为VB.net。我得到了以下代码的错误 Closed已在此类中声明为“public-Even-Closed(发件人作为对象,e作为System.EventArgs)” 同样的错误也会发生在显示的。有人有什么想法要解决吗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
#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:你说的“尝试”是什么意思,你的代码区分大小写了吗?请用新的详细信息更新您的问题。。。