none
C# Ausdruck übersetzen RRS feed

  • Frage

  • Hallo Zusammen,

    ich bin in C# nicht ganz so fit wie in VB.NET und schaffe es leider nicht folgende Zeile in VB zu übersetzen.

    Google half leider nicht und ein C# Buch habe ich auch gerade nicht zur Hand.

    Für den Zusammenhang habe ich mehrere Zeilen eingefügt. Es handelt sich aber nur um die

    Fett markierte Zeile.  Ich vermute das es sich hier um einen Lambda Ausdruck handelt. Es wäre sehr nett

    wenn mir hier jemand auf die Sprünge helfen könnte.

    Vielen Dank schon mal im Voraus.

            this.IsEnabledChanged += (s, e) => RefreshContent();
    
            public WindowButton()
    
            {
            InitializeComponent();
            this.IsEnabledChanged += (s, e) => RefreshContent(); 
    
            }
    
            /// <summary>
            /// Set's the content of the button according to the current 'IsEnabled' state of the button
            /// </summary>
    
            protected void RefreshContent() 
            {
            // Button is enabled
            if (this.IsEnabled) 
            this.ActiveContent = this.Content; 
            else
            this.ActiveContent = this.ContentDisabled; 
            }
    
    Sonntag, 31. Oktober 2010 16:01

Antworten

  • Hallo Jens,

    ja das ist ein Lambda-Ausdruck
    und mit Visual Basic 2010 darfst Du so etwas auch schreiben:

      Public Sub New()
        AddHandler MyBase.IsEnabledChanged,
          Sub(s, e)
            RefreshContent()
          End Sub
      End Sub
    
      Protected Sub RefreshContent()
        ' Button is enabled
        If (MyBase.IsEnabled) Then
          Me.ActiveContent = Me.Content
        Else
          Me.ActiveContent = Me.ContentDisabled
        End If
      End Sub
    

    Falls Du Visual Basic 2008 (oder früher einsetzt) oder so ein "neumodisches Zeugs"
    nicht magst, ginge es auch konventionell:

      Public Sub New()
        AddHandler MyBase.IsEnabledChanged, AddressOf RefreshContent
      End Sub
    
      Protected Sub RefreshContent(ByVal sender As Object, ByVal e As DependencyPropertyChangedEventArgs)
        ' Button is enabled
    	' ...
      End Sub
    

    Beachte, dass dabei die Signatur des Methoden-Aufrufs angepasst werden muss -
    ich bin von einem WPF Steuerelement ausgegangen.

    Für weitere Neuigkeiten siehe Neues in Visual Basic 2010

    Gruß Elmar

    Sonntag, 31. Oktober 2010 17:26
    Beantworter

Alle Antworten

  • Hallo Jens,

    ja das ist ein Lambda-Ausdruck
    und mit Visual Basic 2010 darfst Du so etwas auch schreiben:

      Public Sub New()
        AddHandler MyBase.IsEnabledChanged,
          Sub(s, e)
            RefreshContent()
          End Sub
      End Sub
    
      Protected Sub RefreshContent()
        ' Button is enabled
        If (MyBase.IsEnabled) Then
          Me.ActiveContent = Me.Content
        Else
          Me.ActiveContent = Me.ContentDisabled
        End If
      End Sub
    

    Falls Du Visual Basic 2008 (oder früher einsetzt) oder so ein "neumodisches Zeugs"
    nicht magst, ginge es auch konventionell:

      Public Sub New()
        AddHandler MyBase.IsEnabledChanged, AddressOf RefreshContent
      End Sub
    
      Protected Sub RefreshContent(ByVal sender As Object, ByVal e As DependencyPropertyChangedEventArgs)
        ' Button is enabled
    	' ...
      End Sub
    

    Beachte, dass dabei die Signatur des Methoden-Aufrufs angepasst werden muss -
    ich bin von einem WPF Steuerelement ausgegangen.

    Für weitere Neuigkeiten siehe Neues in Visual Basic 2010

    Gruß Elmar

    Sonntag, 31. Oktober 2010 17:26
    Beantworter
  • Hallo Elmar,

    vielen vielen Dank für die Mühe. Ich nutze seit kurzem VS 2010, muss aber zugeben das ich noch nicht die Zeit hatte mich über alle Neuerungen zu informieren. Und ja es handelt sich um WPF. Man muss sich wirklich sehr damit beschäftigen um am Ball zu bleiben :-)

    Jetzt wo ich das lese, erscheint mir das auch logisch. Nochmals Danke und einen schönen Sonntag Abend noch.

    Gruß

    Jens

     

     

    Sonntag, 31. Oktober 2010 17:41