プロが教えるわが家の防犯対策術!

ネットや書籍で調べてみたものの要領を得なかったため質問させていただきます。

開発環境:visual web developer
画面デザイン:テキストボックス(ID:TextBox1)、ボタン(ID:DeleteButton)、ボタン(ID:UpdateButton)、ボタン(ID:CloseButton)

従来の記述方法:ボタン一つずつの単位で押された時の処理を書いていました。
Protected Sub DeleteButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DeleteButton.Click
TextBox1.Text = "削除しました"
End Sub

Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles UpdateButton.Click
TextBox1.Text = "更新しました"
End Sub

Protected Sub CloseButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CloseButton.Click
TextBox1.Text = "終了しました"
End Sub

今回やりたいこと:
押されたボタンのIDを何らかの方法で取得し、変数"ButtonID"に代入→Select Caseを使い、変数の値に応じて処理の振り分けを行う。

Sub Button_Click()
Dim ButtonID As String = ????

Select Case ButtonID

Case "DeleteButton"
TextBox1.Text = "削除しました"

Case "UpdateButton"
TextBox1.Text = "更新しました"

Case "ClseButton"
TextBox1.Text = "終了しました"

Case Else
'処理は行わない
End Select

End Sub

わからない点:押されたボタンのIDを取得する方法です。
    
もしわかる方がいましたらご助言いただけると助かります。
よろしくお願い致します。

A 回答 (2件)

Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DeleteButton.Click, UpdateButton.Click, CloseButton.Click


という感じで、複数のイベントハンドラを1つにまとめる事ができます。この時、sender には押されたボタンのインスタンスが格納されてきます。

sender.ID を取得すればよいかなと思います。確認してませんので微調整してください。
    • good
    • 0

こんにちわ。



visual web developerは当方では使用していませんが、ほぼ同じ様な構文を持つvisual basicだと以下のようにすれば行うことが出来ます。「回答」と言うよりあくまでも「参照」としていただければと思います。(ActiveControl.nameが使用できるか不明なため。使用できない場合は同様のコントロールがあるはず)

<参照コーディング> visual basic

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

xx()

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

xx()

End Sub

Private Sub xx()

Select Case ActiveControl.Name
Case Is = "Button1"
MsgBox("Button1が押されました")

Case Is = "Button2"
MsgBox("Button2が押されました")

Case Else
MsgBox("降下されたボタンが不明です")

End Select


End Sub

この回答への補足

ご助言ありがとうございます。
ActiveControl.Nameは↓のものでしょうか
http://msdn.microsoft.com/ja-jp/library/system.w …

下記のロジックで取得できないか試してみましたが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」といエラーが出てしまっています。インスタンスは作ってるつもりなのですが・・・。
Dim instance As ContainerControl = New ContainerControl
Dim value As String
value = instance.ActiveControl.Name

開発環境:visual web developer 2008 Express Edition

補足日時:2009/12/26 23:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!