2017-02-10 3 views
0

Anscheinend kann ich ein Ereignis nicht direkt in VB aufrufen, und ich muss die Raise-Ereignisanweisung verwenden, um dieses Ereignis zu initiieren. Ich weiß nicht, was die RaiseEvent-Anweisung ist oder wie sie zu verwenden ist und die Microsoft-Support-Site ist vage und nutzlos. Kann mir bitte jemand helfen, diesen Abschnitt zu überarbeiten?VB Ereignis kann nicht direkt aufgerufen werden, raiseevent

Das ist mein VB-Konvertierung:

 Public Sub ttApiInitComplete(api As TTAPI, ex As ApiCreationException) 
     If ex Is Nothing Then 
      ' Connect to X_TRADER 
      apiInstance = DirectCast(api, XTraderModeTTAPI) 
      apiInstance.ConnectionStatusUpdate += New EventHandler(Of ConnectionStatusUpdateEventArgs)(AddressOf m_apiInstance_ConnectionStatusUpdate) 
      apiInstance.Start() 

      Console.WriteLine("API Initialization Complete") 
     Else 
      Console.WriteLine("API Initialization Failed - see ex.Message for details") 
     End If 
    End Sub 

Dies ist auf ursprüngliche Arbeits C#

 public void ttApiInitComplete(TTAPI api, ApiCreationException ex) 
    { 
     if (ex == null) 
     { 
      // Connect to X_TRADER 
      apiInstance = (XTraderModeTTAPI)api; 
      apiInstance.ConnectionStatusUpdate += new EventHandler<ConnectionStatusUpdateEventArgs>(m_apiInstance_ConnectionStatusUpdate); 
      apiInstance.Start(); 
      Console.WriteLine("API Initialization Complete"); 

     } 
     else 
     { 
      Console.WriteLine("API Initialization Failed - see ex.Message for details"); 
     } 
    } 
+5

Das Problem ist der Übersetzer. Verwenden Sie 'AddHandler', um einen Handler anstelle von' + = 'hinzuzufügen – Plutonix

Antwort

3

VB.NET hat eine AddHandler Methode, die die '+' Überlastung Operator funktioniert ähnlich wie die Art und Weise funktioniert zum Hinzufügen von Ereignishandlern in C#. In VB wird kein "+" verwendet. Sie geben den Fall, dass Sie erfassen möchten und den Handler zu feuern, wenn er auftritt:

Sie würden es nennen grob wie folgt:

AddHandler apiInstance.ConnectionStatusUpdate, AddressOf Me.YourEventHandler 
1

Es gibt zwei Teile, um benutzerdefinierte Ereignisse

AddHandler und RaiseEvent

Hinzufügen-Handler teilt dem Code mit, welche Funktion ausgeführt werden soll, wenn ein bestimmtes Ereignis ausgelöst wird.

AddHandler apiInstance.INitComplete, AddressOf Me.ttApiInitComplete 

Um benutzerdefinierte Ereignisse in Ihrer Klasse erstellen von was auch immer

Public Event YourEventName(.. enter your arguments here...) 

dann erklären, wenn Sie es erhöhen müssen ...

RaiseEvent YourEventName(... Your ARguments...) 

Als Alternative auch addHandler verwenden können

Private WithEvents YourClassrObjectName as WhateverItIS 

Dann th at object wird in der intellisense-Liste von Objekten mit aufgelisteten Ereignissen angezeigt.

So etwas ...

Private WithEvents myApi as TTAPI 
Public Sub ttApiInitComplete(sender As TTAPI, ex As ApiCreationException) handles myApi.InitComplete 
    If ex Is Nothing Then 
     ' Connect to X_TRADER 
     apiInstance = DirectCast(api, XTraderModeTTAPI) 
     apiInstance.ConnectionStatusUpdate += New EventHandler(Of ConnectionStatusUpdateEventArgs)(AddressOf m_apiInstance_ConnectionStatusUpdate) 
     apiInstance.Start() 

     Console.WriteLine("API Initialization Complete") 
    Else 
     Console.WriteLine("API Initialization Failed - see ex.Message for details") 
    End If 
End Sub 
Verwandte Themen