コントロール ID でコントロールを探す FindControl
動的にコントロールを生成するとか、多数のコントロールに連続した値を設定するときなど、 コントロールの ID の値から、コントロールオブジェクトを取得する方が便利である場合があります。
例えば、"textBox1"、"textBox2"、"textBox3" ・・・という ID を持つコントロールオブジェクトの参照を取得したいというような場合です。
ここでは、このように ID (の文字列) からコントロールを取得するための FindControl メソッドの利用方法を説明します。
コントロールの ID からオブジェクトを取得する FindControl
さっそく具体例からみてみましょう。
ひとつのページ上にテキストボックスとボタンがあります。
このテキストボックスの ID は "TextBox1" です。
ボタンを押すと・・・
"Hello" という文字がテキストボックスにセットされます。
非常に単純ですね。この例を元に FindControl メソッドでテキストボックスの ID を元にテキストボックスを探すとどうなるか見てみましょう。コードは次の通りです。Button1_Click メソッドはその名の通り、ボタンのイベントハンドラです。
using System;
using System.Web.UI.WebControls;
public partial class page1 : System.Web.UI.Page {
protected void Button1_Click( object sender, EventArgs e ) {
var txb = FindControl( "TextBox1" ) as TextBox;
if( txb == null ) {
return;
}
txb.Text = "Hello";
}
}
FindControl メソッドにテキストボックスの ID を文字列で渡しています。 FindControl メソッドの戻り値の型は Control です。今、取得しようとしているのは TextBox 型です。ダウンキャストになるので、as でキャストしています。
C# の as 演算子については当サイトの姉妹サイト "C# 入門" の as 演算子をみてください。