■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>
すでに解説したように、初期状態でポストバックを発生させられる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>
もっとも、オート・ポストバックを利用するしないにかかわらず、TextChangedイベントをハンドルすることはめったにないはずだ。通常は、テキストが修正されたかどうかにかかわらず、現在入力されているテキストを参照して、何らかの処理を行うだけだろうから、Page_Loadメソッドかボタン・コントロールのClickイベント・ハンドラで処理すれば、ほとんどの場合十分なのである。
Copyright© Digital Advantage Corp. All Rights Reserved.