Übersetzung nach VB

  • C#

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Übersetzung nach VB

    Yo Leute,

    ich lese mir gerade den Artikel von Josh Smith durch und da stoße ich auf den Bereich mit den RelayCommand.
    Da irgendwie alle Converter Probleme mit diesen Zeilen C# Code haben diese nach VB zu übersetzen bitte ich jemanden mir das nach VB zu übersetzen und auch zu erklären:

    C#-Quellcode

    1. public event EventHandler CanExecuteChanged
    2. {
    3. add { CommandManager.RequerySuggested += value; }
    4. remove { CommandManager.RequerySuggested -= value; }
    5. }


    Ich kenne es in VB eigentlich nur so, dass man einfach ein Event als Public Event blabla ... deklariert und gut ist.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    += und -= bedeuten hier so viel wie AddHandler und RemoveHandler.
    Allgemein würde ich das also so interpretieren, dass wenn du dieses Event abonnierst, du eigentlich das Event CommandManager.RequerySuggested abonnierst. Das wirst du so nicht 1zu1 nach VB übersetzen können, da musst du dir Hilfsmethoden, die Delegaten annehmen, schreiben.
    Hm Eventuell hab ich da was gefunden. (msdn.microsoft.com/en-us/library/wf33s4w7.aspx)
    Es gibt in VB auch die Möglichkeit eines "Custom" Events, wo man scheinbar mitgeben kann was bei AddHandler, RemoveHandler und RaiseEvent so passieren soll
    Hab das jetzt mal so übersetzt:

    VB.NET-Quellcode

    1. Private _lst As New List(Of EventHandler)
    2. Public Custom Event CanExecuteChanged As EventHandler
    3. AddHandler(ByVal value As EventHandler)
    4. _lst.Add(value)
    5. End AddHandler
    6. RemoveHandler(ByVal value As EventHandler)
    7. _lst.Remove(value)
    8. End RemoveHandler
    9. RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
    10. For Each handler As EventHandler In _lst
    11. If handler IsNot Nothing Then
    12. handler.BeginInvoke(sender, e, Nothing, Nothing)
    13. End If
    14. Next
    15. End RaiseEvent
    16. End Event


    Mal testen ob das so funzt.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    So nach bisschen suchen im Netz hab ich denk ich nun die korrekte Übersetzung gefunden:

    VB.NET-Quellcode

    1. Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
    2. AddHandler(ByVal value As EventHandler)
    3. AddHandler CommandManager.RequerySuggested, value
    4. End AddHandler
    5. RemoveHandler(ByVal value As EventHandler)
    6. RemoveHandler CommandManager.RequerySuggested, value
    7. End RemoveHandler
    8. RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs)
    9. End RaiseEvent
    10. End Event


    Quelle: maligui.hubpages.com/hub/MVVM-in-VBNet-Lesson-3-The-Core

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Schieb mal einfach die Exe einer einfachen Form mit einem Button in den IlSpy oder so und sieh Dir an, was da alles so mit Add- und RemoveHandler passiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der macht es auch nur zum Teil richtig:

    VB.NET-Quellcode

    1. Namespace WpfApplication1
    2. Friend Class TEST
    3. Public Custom Event CanExecuteChanged As EventHandler
    4. AddHandler
    5. CommandManager.RequerySuggested += value
    6. End AddHandler
    7. RemoveHandler
    8. CommandManager.RequerySuggested -= value
    9. End RemoveHandler
    10. End Event
    11. End Class
    12. End Namespace


    aber die Zeile mit += und -= sind meines Wissens nach AddHandler und RemoveHandler.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Jetzt hast Du mich echt überrascht, das mit dem += und -= unter VB war mir gar nicht geläufig. :D
    Ich hab noch einen anderen Defokussator zu Hause, da kann man das Ziel-Framework vorgeben, ich bilde mir ein, dass zum 2.0 oder 3.0 andere Sachen rauskamen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi
    in C# ist das die kurze Art, Delegaten zu kombinieren bzw. einen Delegaten aus einem (Multicast-)Delegaten zu entfernen. Events sind ähnlich wie Properties quasi eine Art Vorlage für Methoden, d.h. es werden add- und remove-Operationen definiert. Eine Deklaration ohne Körper bzw. in VB als Nicht-Custom-Event implementiert quasi ein Standardverhalten für add und remove.
    Gerade nochmal nachgeschaut: In C# kann man Events mit Körper nicht direkt auslösen, das wird unterbunden; in VB geht das dann entsprechend durch die Definition in RaiseEvent. In deinem Fall kannst du das Event eh nicht manuell auslösen, außer du definierst eine eigene Delegaten-Liste z.B. über Delegate.Combine oder Delegate.Remove (statt der Liste, die du verwendet hast btw.).

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Das fiese ist halt, dass c# kein RaiseEvent-Schlüsselwort hat, und daher fehlt dieser Part inne Implementierung eines Custom Events. Josh's CustomEvent gehört so übersetzt:

    VB.NET-Quellcode

    1. Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
    2. AddHandler(ByVal value As EventHandler)
    3. AddHandler CommandManager.RequerySuggested, value
    4. End AddHandler
    5. RemoveHandler(ByVal value As EventHandler)
    6. RemoveHandler CommandManager.RequerySuggested, value
    7. End RemoveHandler
    8. RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
    9. CommandManager.InvalidateRequerySuggested()
    10. End RaiseEvent
    11. End Event
    in VS2012 gibts übrigens das DelegateCommand als Bordmittel, welches genau Josh's Ansatz umsetzt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()