方法 : コントロール コレクションをウォークしてページの 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;
        }
    }
    
    

参照

概念

Web フォーム コントロールの識別