2012-03-27 9 views
1

私は、いくつかのボタンからのイベントを処理し、クリックされたボタンに基づいて選択...ケースを定義しようとする関数に取り組んでいます。このようなもの...VB.NETのSelect ... Caseでスイッチ変数としてコントロールを使用できますか?

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 

しかし、私はそれをコンパイルすることはできません。 「Operator =が 'System.Windows.Forms.Button'型と 'System.Windows.Forms.Button'型に対して定義されていないことを報告します。また、私はどちらか動作しません

Select button_clicked 

    Case btnThis.Equals(button_clicked) 

Select button_clicked 

    Case btnThis.Equals 

を試してみました。 Select ... Caseをこのように定義する方法はありますか、参照型を比較しようとすると常に失敗することになっていますか?コントロールの名前を使用して

答えて

2

は一つの選択肢です:

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

あなたがオブジェクトが等しいをかどうかを比較するIsキーワードを使用する必要がありますが、あなたがチェックするIfステートメントを使用する必要があります。そのため

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

おかげ。私は悲惨にIsキーワードを知らなかった。 –

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

これはうまくいきますが、あなたのコードを維持しなければならない人には迷惑をかける可能性があります。個人的に私はこれを避けることを好む - 本質的にこれは 'If ... ElseIf ... ElseIf ...'ブロックが 'Select Case'を装っていることです。なぜか...もしかして... ElseIf ... ElseIf ... ' – MarkJ

+0

@マークJ:合意した:) –

関連する問題