2016-11-26 28 views
-1

这里是接口事件处理程序在C#不正确地转换为VB.net

Public Interface ILoginConductor 
    Inherits IHandle(Of LoginEvent) 
    Inherits IHandle(Of LogoutEvent) 
    Inherits IHandle(Of ExitEvent) 
End Interface 

在C#这里是一个使用界面

public void Handle(LoginEvent message) 
{ 
    LoginWindow loginWindow = new LoginWindow(); 
    loginWindow.Login += new EventHandler<LoginEventArgs>(this.LoginWindow_Login); 
    loginWindow.Cancel += new EventHandler(LoginWindow_Cancel); 
    loginWindow.ShowDialog(); 
} 

方法并将其转换为这个在VB .Net

Public Sub Handle(message As LoginEvent) Implements ILoginConductor.Handle 
    Dim loginWindow As New LoginWindow() 
    loginWindow.Login += New EventHandler(Of LoginEventArgs)(AddressOf Me.LoginWindow_Login) 
    loginWindow.Cancel += New EventHandler(AddressOf LoginWindow_Cancel) 
    loginWindow.ShowDialog() 
End Sub 

但编译器会抛出一个错误,说我必须使用RaiseEvent。有人可以帮我指导我如何修复我的代码。

+0

你是什么意思“转换为”?您是否使用转换工具?如果是这样,哪一个?这个问题是因为VB没有+ =操作符。您需要使用[RaiseEvent语句](https://msdn.microsoft.com/en-us/library/fwd3bwed.aspx)。 – Clint

+2

@Clint:'+ ='的VB.NET相当于[** AddHandler语句**](https://msdn.microsoft.com/en-us/library/7taxzxka.aspx),而不是RaiseEvent。 –

+0

@VisualVincent它确实!愚蠢的疏忽对我来说。 – Clint

回答

0

编译器可能告诉你,VB代码中的事件必须以与C#不同的方式触发。您需要在事件方法调用之前放置“raiseevent”关键字(例如,raiseevent Login_WindowCancel())。看看这里https://msdn.microsoft.com/en-us/library/fwd3bwed.aspx

+1

编译器错误地解释它。在这种情况下,'+ ='的实际等效值是[** AddHandler语句**](https://msdn.microsoft.com/zh-cn/library/7taxzxka.aspx)。 –

+0

另请参阅[**如何订阅和取消订阅活动(C#编程指南)**](https://msdn.microsoft.com/zh-cn/library/ms366768.aspx)。 –

+0

感谢您的帮助,但我仍感到困扰。 – user3418258

相关问题