2016-11-26 68 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