第7回 Webサーバ・コントロール(中編)連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (2/4 ページ)

» 2002年09月26日 00時00分 公開
[田口景介]

 

■TextChangedイベント

 asp:TextBoxコントロールには、テキスト・ボックスのテキストが修正されたときに発生するTextChangedイベントが用意されている。

asp:TextBoxコントロールの書式(TextChangedイベントを処理する場合)

<asp:TextBox id="<コントロールID>"
  Text="<ラベル>"
  OnTextChanged="<イベント・ハンドラ名>"
  runat="server" />

TextChangedイベント・ハンドラのシグネチャ(標準形)

void <イベント・ハンドラ名>(Object sender, EventArgs e)

 ただし、次のリスト7.2に示すサンプル・プログラムを実行すれば分かるように、TextChangedイベント・ハンドラが定義されているにもかかわらず、テキストを修正してもポストバックは発生しないため、イベント・ハンドラが呼び出されることはない。

<%@ PAGE LANGUAGE="C#" %>
<html>
<head>
<script runat="server">
void textbox1_TextChanged(Object sender, EventArgs e) {
  label1.Text = textbox1.Text;
  literal1.Text = textbox1.Text;
}
</script>
</head>

<body>
  asp:Label : <asp:Label id="label1"
                          Text="Label" runat="server" />
  <br>
  asp:Literal : <asp:Literal id="literal1"
                          Text="Literal" runat="server" />
  <form runat="server">
    <asp:TextBox id="textbox1" Text="TextBox"
      OnTextChanged="textbox1_TextChanged"
      runat="server" />
    <asp:Button Text="OK" runat="server" />
  </form>
</body>
</html>

リスト7.2 TextChangedイベントを使用したサンプル・プログラム(control05.aspx)
control05.aspxのダウンロード(control05.aspx.zip)

 すでに解説したように、初期状態でポストバックを発生させられるWebサーバ・コントロールは、ボタン系コントロールの3種類だけなのである。従って、テキスト・ボックスのテキストを修正しても、テキスト・ボックスと同じフォームにあるボタンをクリックしてポストバックが発生するまで、TextChangedイベント・ハンドラが呼び出されることはない。リスト7.2では、ボタン・コントロールに対するイベント・ハンドラは定義されていないが、テキストを修正してから、ボタンをクリックすれば、TextChangedイベント・ハンドラが呼び出され、ラベルのテキストが変更される。

 ただし、次のようにAutoPostBack属性にtrueを指定したテキスト・ボックスでは、ボタンのクリックを待たずに、即座にポストバックを発生させることが可能だ。

asp:TextBoxコントロールの書式
(TextChangedイベントをオート・ポストバックする場合)

<asp:TextBox id="<コントロールID>"
  Text="<ラベル>"
  AutoPostBack="ture"
  OnTextChanged="<イベント・ハンドラ名>"
  runat="server" />

 この属性を指定すると、テキストを修正した後、タブ・キーを押すなどしてほかのコントロールにフォーカスが移った時点で、ポストバックが発生するようになる。つまり、ボタン系コントロールのクリックはもちろん、ボタン系コントロールをフォームに配置する必要すらなくなり、テキスト・ボックスだけでもポストバックを発生させられるようになる。このような仕組みはオート・ポストバックと呼ばれ、テキスト・ボックス以外にもいくつかのWebサーバ・コントロールに実装されている。

<%@ PAGE LANGUAGE="C#" %>
<html>
<head>
<script runat="server">
void textbox1_TextChanged(Object sender, EventArgs e) {
  label1.Text = textbox1.Text;
  literal1.Text = textbox1.Text;
}
</script>
</head>

<body>
  asp:Label : <asp:Label id="label1"
                          Text="Label" runat="server" />
  <br>
  asp:Literal : <asp:Literal id="literal1"
                          Text="Literal" runat="server" />
  <form runat="server">
    <asp:TextBox id="textbox1" Text="TextBox"
      OnTextChanged="textbox1_TextChanged"
      AutoPostBack="true"
      runat="server" />
  </form>
</body>
</html>

リスト7.3 オート・ポストバックを使用したサンプル・プログラム(control06.aspx)
control06.aspxのダウンロード(control06.aspx.zip)

 もっとも、オート・ポストバックを利用するしないにかかわらず、TextChangedイベントをハンドルすることはめったにないはずだ。通常は、テキストが修正されたかどうかにかかわらず、現在入力されているテキストを参照して、何らかの処理を行うだけだろうから、Page_Loadメソッドかボタン・コントロールのClickイベント・ハンドラで処理すれば、ほとんどの場合十分なのである。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。