方法 : コントロール コレクションをウォークしてページの Web フォーム コントロールを検索する
更新 : 2007 年 11 月
ページ上のすべてのコンテナ コントロールおよびページには Controls コレクションがあり、これを使用して個々のコントロールを取得できます。
Controls コレクション内のコントロールを検索するには
コンテナ コントロールの Controls コレクションをループします。このコレクションは、ControlCollection 型で、Control 型のオブジェクトを返します。
Controls コレクションをウォークする方法を次の例に示します。この例では、少なくとも 1 つの TextBox コントロール、および Label コントロールと Button コントロールを 1 つずつ含む ASP.NET Web ページを前提にしています。このコードは、Page オブジェクトの子コントロールをすべて取得します。この例ではいくつかの高レベルの子コントロール (たとえば HtmlForm オブジェクト) しか生成されないため、それぞれの子コントロールの Controls コレクションもウォークの対象になります。このコードは、それぞれのコントロールの種類を比較してテキスト ボックスを探します。テキスト ボックスが検出されると、そのテキスト ボックスの値が取得され、Label コントロールの末尾に表示されている文字列にその値が連結されます。
この例では、Page オブジェクトに含まれるコントロールと、ページの直接の子であるコントロールだけを検出します。ページの子コントロールの子になっているテキスト ボックスは検索されません。たとえば、ページに Panel コントロールを追加すると、この例にあるように、Panel コントロールは Page に含まれる HtmlForm コントロールの子になります。ただし、その後に TextBox コントロールを Panel コントロールに追加すると、TextBox コントロールのテキストは表示されません。これは、このコントロールがページの子でも、ページの子コントロールの子でもないからです。このようなコントロールのウォークに関するより実際的な操作としては、それぞれのコントロールの Controls コレクションをウォークするために呼び出すことができる再帰的なメソッドを作成します。ただし簡略化のために、次の例は再帰的関数としては作成されていません。
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim allTextBoxValues As String = "" Dim c As Control Dim childc As Control For Each c In Page.Controls For Each childc In c.Controls If TypeOf childc Is TextBox Then allTextBoxValues &= CType(childc, TextBox).Text & "," End If Next Next If allTextBoxValues <> "" Then Label1.Text = allTextBoxValues End If End Sub
private void Button1_Click(object sender, System.EventArgs e) { string allTextBoxValues = ""; foreach (Control c in Page.Controls) { foreach (Control childc in c.Controls) { if (childc is TextBox) { allTextBoxValues += ((TextBox)childc).Text + ","; } } } if (allTextBoxValues != "") { Label1.Text = allTextBoxValues; } }