- 締切済み
ボタンを押した時のコーディング方法について
ネットや書籍で調べてみたものの要領を得なかったため質問させていただきます。 開発環境: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を取得する方法です。 もしわかる方がいましたらご助言いただけると助かります。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DeleteButton.Click, UpdateButton.Click, CloseButton.Click という感じで、複数のイベントハンドラを1つにまとめる事ができます。この時、sender には押されたボタンのインスタンスが格納されてきます。 sender.ID を取得すればよいかなと思います。確認してませんので微調整してください。
- pu--n
- ベストアンサー率56% (32/57)
こんにちわ。 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.windows.forms.containercontrol.activecontrol.aspx 下記のロジックで取得できないか試してみましたが、 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」といエラーが出てしまっています。インスタンスは作ってるつもりなのですが・・・。 Dim instance As ContainerControl = New ContainerControl Dim value As String value = instance.ActiveControl.Name 開発環境:visual web developer 2008 Express Edition