2010-04-19 4 views
3
[Visual C#] 
    public ICommand MyCommand 
    { 
     get 
     { 
      if (this.myCommand == null) 
      { 
       this.myCommand = new RelayCommand(this.ShowMyCommand); 
      } 

      return this.myCommand; 
     } 
    } 

    private void ShowMyCommand(object param) 
    { 
     ... 
    } 

Ce code fonctionne très bien, mais quand je le convertir en Visual Basic:C#> VB Conversion, RelayCommand se comporte différemment

[Visual Basic] 
Private _myCommand As RelayCommand 
Public ReadOnly Property MyCommand As ICommand 
    Get 
     If Me._myCommand Is Nothing Then 
      Me._myCommand = New RelayCommand(Me.ShowMyCommand) 
     End If 

     Return Me._myCommand 
    End Get 
End Property 

Private Sub ShowMyCommand(ByVal param As Object) 

    ... 

End Sub 

Je reçois l'erreur:

Error 3 Argument not specified for parameter 'param' of 'Private Sub ShowMyCommand(param As Object)'.

Toutes les idées? Je fais juste une conversion aveugle, donc je ne comprends pas ce que le projet fait, je le convertis juste.

+1

Vous ne devez pas spécifier AddressOf dans VB? Cependant, je suis loin de ma ligue dans VB, je semble juste rappeler que la création d'un événement nécessite un mot clé supplémentaire. –

+0

Vous avez raison, déplacez votre commentaire à une réponse et je vais le marquer comme accepté! ;) – NibblyPig

Répondre

5

Je suis un peu sur la glace fine quand il s'agit de VB, mais d'après ce que je sais, vous devez préfixer le nom de la méthode avec le mot-clé AddressOf afin qu'il puisse être utilisé comme groupe de méthodes pour l'événement.

La ligne suivante:

Me._myCommand = New RelayCommand(Me.ShowMyCommand) 

besoins à écrire:

Me._myCommand = New RelayCommand(AddressOf Me.ShowMyCommand) 

Le message d'erreur est parce que le compilateur tente de compiler un appel à la méthode, et manque ainsi la argument à son paramètre.

+0

Merci pour l'explication! – NibblyPig

Questions connexes