方法 : Button Web サーバー コントロール イベントに応答する
更新 : 2007 年 11 月
Button Web サーバー コントロール、LinkButton Web サーバー コントロール、または ImageButton Web サーバー コントロールをクリックすると、現在のページがサーバーに送信され、サーバーで処理されます。
ボタン イベントに応答するには
次のいずれかのイベントのイベント ハンドラを作成します。
ページの Page_Load イベント。ボタンは常にページをサーバーにポストするため、このメソッドは常に実行されます。フォームが送信されることだけが重要で、クリックされたボタンを特定する必要がない場合は、Page_Load イベントを使用します。
ボタンの Click イベント。クリックされたボタンを特定する必要がある場合は、このイベントのイベント ハンドラを作成します。
メモ : ImageButton コントロールを使用し、ユーザーがクリックした位置の x 座標と y 座標を調べる場合は、このイベントのイベント ハンドラを作成します。詳細については、「方法 : ImageButton Web サーバー コントロールで座標を決定する」を参照してください。
ユーザーが Button Web サーバー コントロールをクリックしたときの応答の例は、次のとおりです。このメソッドは Label Web サーバー コントロールにメッセージを表示します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text="You clicked a button" End Sub
public void Button1_Click (object sender, System.EventArgs e) { Label1.Text="You clicked a button."; }
Page_Load イベント ハンドラでクリックされたボタンに対する応答の例は、次のとおりです。このメソッドは、ページの IsPostBack プロパティを調べることにより、ページが初めて処理されたのかどうか、またはボタンのクリックによって送信されたのかどうかを判定します。
Private Sub Page_Load(ByVal Sender As System.Object, ByVal e _ As System.EventArgs) Handles MyBase.Load If Not IsPostback Then ' This is called the first time the page has loaded. ' The user will not have been able to click any buttons yet. Else ' This is called if the form has been posted back, possibly ' by a button click. Me.Label1.Text = "You clicked a button." End If End Sub
private void Page_Load(object sender, System.EventArgs e) { if (!IsPostBack) { // Evals true first time browser hits the page. } else { // This is called if the form has been posted back, possibly // by a button click. this.Label1.Text = "You clicked a button."; } }
単純な整数の四則演算を行うコードの例を次に示します。すべてのボタン ([Add]、[Subtract]、[Multiply]、および [Divide]) を同じメソッドにバインドすると、四則演算のすべてを同じ場所で処理できるため、コードを繰り返し記述する必要がありません。Calculate メソッドへのボタンを連結するには、Visual Basic の AddHandler メソッドと C# の += 演算子を使用します。入力値が確実に整数になるように指定するには、エラー処理コードを Calculate メソッドに追加したり、Web フォームに使用できる検証コントロールを使用したりする方法があります。
' Set the CommandName property of the buttons to "Add", ' "Subtract", "Multiply", and "Divide". Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Me.btnAdd.Click, AddressOf Calculate AddHandler Me.btnSubtract.Click, AddressOf Calculate AddHandler Me.btnMultiply.Click, AddressOf Calculate AddHandler Me.btnDivide.Click, AddressOf Calculate End Sub Public Sub Calculate(ByVal sender As Object, ByVal e As System.EventArgs) Dim op1 As Integer = CType(Me.TextBox1.Text, Integer) Dim op2 As Integer = CType(Me.TextBox2.Text, Integer) Dim result As Integer Select Case CType(sender, Button).CommandName Case "Add" result = op1 + op2 Case "Subtract" result = op1 - op2 Case "Multiply" result = op1 * op2 Case "Divide" ' Divide two numbers and return an integer result. If op2 > 0 Then result = op1 \ op2 Else result = 0 End If Case Else ' Error handling code here. End Select Label1.Text = result.ToString() End Sub
// Set the CommandName property of the buttons to "Add", _ // "Subtract", "Multiply", and "Divide". protected void Page_Load(object sender, EventArgs e) { btnAdd.Click += new System.EventHandler(this.Calculate); btnSubtract.Click += new System.EventHandler(this.Calculate); btnMultiply.Click += new System.EventHandler(this.Calculate); btnDivide.Click += new System.EventHandler(this.Calculate); } protected void Calculate (object sender, System.EventArgs e) { int op1 = Convert.ToInt16(TextBox1.Text); int op2 = Convert.ToInt16(TextBox2.Text); int result = 0; switch(((Button)sender).CommandName) { case "Add" : result = op1 + op2; break; case "Subtract" : result = op1 - op2; break; case "Multiply" : result = op1 * op2; break; case "Divide" : // Integer division. if (op2 > 0) result = op1 / op2; else result = 0; break; default: // Error handling code here. break; } Label1.Text = result.ToString(); }