第6回 Webサーバ・コントロール(前編):連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (2/4 ページ)
ASP.NETにはWebページのGUI部品となるさまざまなコントロールが用意されている。今回はそれらの基礎とボタン部品について解説する。
■サーバ・コントロールのイベント
Webサーバ・コントロールはそれぞれ固有のイベントを持ち、ユーザーの操作に応じて、イベント・ハンドラを呼び出す機能を備えている。各Webサーバ・コントロールが備えるイベントを表6.3に示す。表に示されているように、複数種のイベントを発生させるWebサーバ・コントロールもあれば、まったくイベントを発生しないコントロールもある。
コントロール | イベント | イベント・デリゲート |
---|---|---|
asp:Button | Click | EventHandler |
asp:Button | Command | CommandEventHandler |
asp:Calendar | SelectionChanged | EventHandler |
asp:Calendar | DayRender | DayRenderEventHandler |
asp:Calendar | VisibleMonthChanged | MonthChangedEventHandler |
asp:CheckBox | CheckedChanged | EventHandler |
asp:CheckBoxList | SelectedIndexChanged | EventHandler |
asp:DropDownList | SelectedIndexChanged | EventHandler |
asp:ImageButton | Click | EventHandler |
asp:ImageButton | Command | CommandEventHandler |
asp:LinkButton | Click | EventHandler |
asp:LinkButton | Command | CommandEventHandler |
asp:ListBox | SelectedIndexChanged | EventHandler |
asp:RadioButton | CheckedChanged | EventHandler |
asp:RadioButtonList | SelectedIndexChanged | EventHandler |
asp:TextBox | TextChanged | EventHandler |
asp:ImageButton | Click | ImageClickEventHandler |
asp:AdRotator | AdCreated | AdCreatedEventHandler |
asp:DataGrid | CancelCommand | DataGridCommandEventHandler |
asp:DataGrid | DeleteCommand | DataGridCommandEventHandler |
asp:DataGrid | EditCommand | DataGridCommandEventHandler |
asp:DataGrid | ItemCommand | DataGridCommandEventHandler |
asp:DataGrid | UpdateCommand | DataGridCommandEventHandler |
asp:DataGrid | ItemCreated | DataGridItemEventHandler |
asp:DataGrid | ItemDataBound | DataGridItemEventHandler |
asp:DataGrid | PageIndexChanged | DataGridPageChangedEventHandler |
asp:DataGrid | SortCommand | DataGridSortCommandEventHandler |
asp:DataList | CancelCommand | DataListCommandEventHandler |
asp:DataList | DeleteCommand | DataListCommandEventHandler |
asp:DataList | EditCommand | DataListCommandEventHandler |
asp:DataList | ItemCommand | DataListCommandEventHandler |
asp:DataList | UpdateCommand | DataListCommandEventHandler |
asp:DataList | ItemCreated | DataListItemEventHandler |
asp:DataList | ItemDataBound | DataListItemEventHandler |
asp:Repeater | ItemCommand | RepeaterCommandEventHandler |
asp:Repeater | ItemCreated | RepeaterItemEventHandler |
asp:Repeater | ItemDataBound | RepeaterItemEventHandler |
asp:HyperLink | なし | |
asp:Image | なし | |
asp:Label | なし | |
asp:Literal | なし | |
asp:Panel | なし | |
asp:PlaceHolder | なし | |
表6.3 Webサーバ・コントロールのイベント一覧 |
これらイベントの発生をサーバ・サイドで検出して処理するには、次の2つの記述を追加する。
- Webサーバ・コントロールのタグにイベントとそれに対応するイベント・ハンドラを指定する
- イベント・ハンドラとなるメソッドを定義する
まず、タグに属性として、
On<イベント名>="<イベント・ハンドラ名>"
を追加して、処理すべきイベントと、そのイベントが発生したときに呼び出されるイベント・ハンドラ(メソッド)の名前を指定する。イベント・ハンドラ名には、メソッドに指定できる任意の名前を指定することができるが、
<コントロールID>_<イベント名>
と名付けるのが習慣となっているようだ。
<asp:Button id="submit" OnClick="Submit_Click" runat="server" />
次に、イベント・ハンドラ名として指定した名前でメソッドを定義する。このイベント・ハンドラとなるメソッドのシグネチャはイベントの種類によってさまざまであり、その対応は表6.3のイベント・デリゲートに示したとおりである。ただし、大半のイベント・ハンドラは、次のシグネチャで示される標準的なイベント・デリゲート“EventHandler”として定義されている。これ以外のシグネチャで定義されるイベント・ハンドラも少なくないが、それらはごく一部のコントロールに集中していることが表6.3から見て取れるはずだ。
void <イベント・ハンドラ名>(object sender, EventArgs e) {
...
}
void Submit_Click(object sender, EventArgs e) {
...
}
イベントが発生すると、イベント・ハンドラに2つのパラメータが渡される。object型の第1引数には、イベントを発生したコントロール・オブジェクトが格納されている。例えば、asp:Buttonサーバ・コントロールがClickイベントを発生させたのであれば、第1引数にはこのボタン・コントロールに対応するButtonオブジェクトが渡される。
イベント・ハンドラの第2引数はイベントに付随する情報を渡すために用意されているが、標準型シグネチャで定義されるEventArgs型では、特に有用な情報は格納されていない。このEventArgsクラスはイベント・データが格納される基本クラスであり、ほかのイベント・タイプでは、EventArgsクラスのサブクラスが第2引数として渡され、そのメンバにイベント固有の情報が格納される。例えば、asp:ImageButtonコントロールが発生するImageClickイベントのイベント・ハンドラは、次のシグネチャで定義されている。
void <イベント・ハンドラ名>(object sender, ImageClickEventArgs e) {
}
第1引数は同じくobject型だが、第2引数はImageClickEventArgsオブジェクトとなっている。このImageClickEventArgsクラスはint型のフィールドXとYを持ち、イベント発生時にクリックした座標が格納されている。イベント・ハンドラでこの値を参照すれば、イメージ・ボタンをクリッカブル・マップのように機能させることができる。
このほかにも、イベント固有のパラメータを渡すイベントがあるが、それはボタン系コントロール(asp:Button、asp:ImageButton、asp:LinkButton)が発生するCommandイベントと、いま述べたasp:ImageButtonコントロールが発生するImageClickイベント、それに多機能なリッチ・コントロール(asp:AdRotator、asp:Calendar、asp:DataGrid、asp:DataList、asp:Repeater)が発生するさまざまなイベントに限られ、それ以外のコントロールが発生する大半のイベントでは、特別なパラメータを格納しないEventArgsオブジェクトが渡される。
ImageClickイベントの例に示したとおり、イベント固有のパラメータはEventArgsクラスのサブクラスとして渡されるが、このサブクラスの名前は、イベント・デリゲート名の末尾から“Handler”を取り除き、代わりに“Args”をつなげた名称となる。つまり、デリゲート名が“<イベント名>Handler”ならば、そのパラメータは“<イベント名>Args”クラスのオブジェクトとして渡される。
Copyright© Digital Advantage Corp. All Rights Reserved.