方法 : ASP.NET Web ページでイベント ハンドラを作成する (Visual Studio)
更新 : 2007 年 11 月
Visual Studio での ASP.NET Web ページの編集中、さまざまな方法でコントロールおよびページに対してサーバー イベント ハンドラを作成できます。方法によっては使用するプログラミング言語に依存するものもあります。イベント ハンドラは Visual Web Developer の機能を使用して作成したり、コード内で宣言によって作成したりできます。
メモ : |
---|
また、ページ内の要素としてブラウザ上でコントロールが実行されるときに実行されるクライアント スクリプトに、イベントを追加することもできます。詳細については、「方法 : ASP.NET Web サーバー コントロールにクライアント スクリプト イベントを追加する」を参照してください。 |
複数のイベントをサポートするコントロールは、通常、1 つのイベントが既定のイベントになるように構成されます。たとえば、Button コントロールの既定のイベントは Click イベントです。
Visual Web Developer でのイベント ハンドラの作成
既定のイベントに対応するイベント ハンドラを作成するには
デザイン ビューで、ページまたは既定のイベント ハンドラを作成するコントロールをダブルクリックします。
Visual Web Developer により、既定のイベントに対応するハンドラが作成され、カーソルがイベント ハンドラに置かれた状態でコード エディタが開きます。
[プロパティ] ウィンドウでイベント ハンドラを作成するには
デザイン ビューで、イベント ハンドラを作成するコントロールを選択します。
メモ : デザイン ビューではページを選択できないため、この手順ではページ レベルのイベントを作成できません。1 つ前の手順を使用してください。
[プロパティ] で、イベント記号 をクリックします。
[プロパティ] ウィンドウに、選択したコントロールのイベントの一覧が表示されます。
イベント名の隣のボックスに対して、次のいずれかを実行します。
このイベントに対して新しいイベント ハンドラを作成する場合は、ダブルクリックします。デザイナにより、controlID_event の形式でハンドラ名が設定されます。
作成するイベント ハンドラの名前を入力します。
ドロップダウン リストから既存のハンドラの名前を選択します。
ドロップダウン リストには、イベントに対する正しいシグネチャを持つメソッドの一覧が表示されます。
終了すると、コード エディタに切り替わり、カーソルがハンドラ内に置かれます。
コード エディタでイベント ハンドラを作成するには
次のいずれかの方法でコード エディタに切り替えます。
単一ファイル Web ページの場合、ソース ビューに切り替えます。
分離コード ページの場合、ソリューション エクスプローラで、ページ名を右クリックし、[コードの表示] をクリックします。
メモ : C# を使用する分離コード ページの場合、次の手順のドロップダウン リストにコントロール名が表示されないため、この方法は使用できません。他の手順を使用してください。
コード エディタ ウィンドウの一番上の左側のドロップダウン リストからコントロールを選択し、次に、右側のドロップダウン リストからイベントを選択します。
メモ : メソッドが既に存在するイベントは太字で表示されます。
宣言によるイベント ハンドラの作成
Visual Web Developer を使用してハンドラを作成する場合、Visual Web Developer が、スケルトン ハンドラを作成し、ハンドラを呼び出すようにコントロールを構成します。Visual Web Developer を使用しないで同じことを行うことができます。
ページ イベントのハンドラを作成するには
コード エディタで、Page_event という名前のメソッドを作成します。
たとえば、ページの Load イベントのハンドラを作成するには、Page_Load という名前のメソッドを作成します。
メモ : ページ イベント ハンドラは、他のコントロール イベント ハンドラのようにパラメータを受け取る必要はありません。
ASP.NET ページでは、自動的にページ イベントが Page_event という名前のメソッドにバインドされます。この自動バインディングは、@ Page ディレクティブの AutoEventWireup 属性によって構成されます。この値は既定では true に設定されています。AutoEventWireup を false に設定した場合、Page_event 形式の名前付け規約に従っているメソッドは自動検索されません。
ページの Load イベントのハンドラのコード例を次に示します。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Page.IsPostBack Then Response.Write("<br>Page has been posted back.") End If End Sub
protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { Response.Write("<br>Page has been posted back."); } }
コントロールのハンドラを宣言して追加するには
コード エディタで、適切なシグネチャを持つイベント処理メソッドを作成します。
メソッド名は何でもかまいません。
コントロールのマークアップ内で、On<event name> という名前の属性を使用して、イベント ハンドラをフックします。イベント ハンドラ メソッド名を値として使用します。
TextChanged イベントが NameChange という名前のイベント ハンドラ メソッドにバインドされる TextBox コントロールのマークアップのコード例を次に示します。
セキュリティに関するメモ : このコントロールには、ユーザー入力を受け付けるテキスト ボックスがあるため、セキュリティ上の脅威を招く可能性があります。既定では、ASP.NET Web ページは、ユーザー入力にスクリプトまたは HTML 要素が含まれていないことを検証します。詳細については、「スクリプトによる攻略の概要」を参照してください。
Protected Sub NameChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles textbox1.TextChanged 'Sub for the OnTextChanged event End Sub
<asp:TextBox ID="textbox1" Runat="server" Text="" OnTextChanged="NameChange" />
コードにイベント メソッドを追加します。たとえば、次のコード例では、NameChange という名前のイベント ハンドラ メソッドに対するコードが示されています。
protected void NameChange(object sender, EventArgs e) { //Method for the OnTextChanged event. }
Visual Basic でイベント ハンドラを暗黙的に追加するには
コード エディタで、適切なシグネチャを持つイベント処理メソッドを作成します。
メソッド名は何でもかまいません。
Handles キーワードを使用して、メソッドをバインドするコントロールとイベントを指定します。
SampleButton という名前のボタンの Click イベントのイベント ハンドラのコード例を次に示します。このコード例の中のメソッドは Clicked という名前になっています。
Protected Sub SampleButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles SampleButton.Click ' Code goes here. End Sub
メモ : Handles キーワードを使用する場合、コントロール マークアップ内にイベント属性を含めないでください。イベント属性が含まれている場合、ハンドラが 2 度呼び出されます。
メソッドが複数のイベントを処理する場合、Handles 句にイベント名を追加します。このときイベント名はコンマで区切ります。
複数のボタンの Click イベントを処理するメソッドのコード例を次に示します。ハンドラは送信元引数を調べて、どのボタンがクリックされたのかを判断します。
Protected Sub AnyClicked(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click Dim b As Button = CType(sender, Button) Response.Write("You clicked the button labeled " & b.ID) End Sub
参照
処理手順
方法 : ASP.NET Web ページでイベント ハンドラを実行時に動的に連結する