2012-03-27 8 views
1

Ich arbeite an einer Funktion, die Ereignisse aus einer Reihe von Schaltflächen behandelt und versucht, einen Select ... Case basierend auf der angeklickten Schaltfläche zu definieren. So etwas wie ...Kann in einem Select ... Case in VB.NET ein Steuerelement als Switch-Variable verwendet werden?

Private Sub btnClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles btnThis.Click, _ 
       btnThat.Click, _ 
       btnTheOther.Click 
     Dim button_clicked As Button = CType(sender, Button) 

     ...Do some common parts... 

     Select button_clicked 

      Case btnThis 
       ...Do this... 

      Case btnThat 
       ...Do that... 

      Case btnTheOther 
       ...Do the other... 

      Case Else 

     End Select 

Aber ich kann es nicht kompilieren; Es meldet, dass "Operator = nicht für Typen" System.Windows.Forms.Button "und" System.Windows.Forms.Button "definiert ist" ". Ich habe auch versucht,

Select button_clicked 

    Case btnThis.Equals 

und

Select button_clicked 

    Case btnThis.Equals(button_clicked) 

die ebenfalls nicht funktionieren. Gibt es eine Möglichkeit, einen Select ... Case auf diese Art und Weise zu definieren oder ist es immer zum Scheitern verurteilt aufgrund des Vergleichs von Referenztypen?

Antwort

2

die Namen der Steuerung zu verwenden ist eine Option:

Private Sub btnClick(ByVal sender As Object, ByVal e As EventArgs) _ 
      Handles btnThis.Click, _ 
        btnThat.Click, _ 
        btnTheOther.Click 

    Select DirectCast(sender, Button).Name 
    Case btnThis.Name 
     ...do this... 
    Case btnThat.Name 
     ...do that... 
    Case btnTheOther.Name 
     ...do the other... 
    Case Else 
     ...etc 
    End Select 
End Sub 
3

Sie haben das Is Schlüsselwort verwenden, um zu vergleichen, wenn Objekte gleich sind, aber Sie haben If Aussagen zu verwenden, um zu überprüfen.

If sender Is btnThis Then 
    ... 
ElseIf sender Is btnThat Then 
    ... 
End If 
+0

Vielen Dank für das; Ich war beklagenlos über das Is-Keyword. –

1
Select Case True 
    Case sender Is Button1 
     MsgBox("Button One!") 
    Case sender Is Button2 
     MsgBox("Button Two!") 
End Select 
+0

Das funktioniert, aber es kann jemanden verblüffen, der Ihren Code pflegen muss. Persönlich bevorzuge ich es, dies zu vermeiden - im Wesentlichen ist dies ein 'If ... ElseIf ... ElseIf ...' Block, der sich als 'Select Case' maskiert. Warum schreibst du nicht 'If ... ElseIf ... ElseIf ...' – MarkJ

+0

@MarkJ: Einverstanden :) –

Verwandte Themen