共用方式為


HOW TO:逐一查看控制項集合以尋找頁面上的 Web Form 控制項

更新:2007 年 11 月

網頁上的每個容器控制項和網頁本身,都具有可以用來取得個別控制項的 Controls 集合。

若要在 Controls 集合中尋找控制項

  • 在容器控制項的 Controls 集合上執行迴圈。集合的型別是 ControlCollection,傳回的物件型別是 Control

    下列程式碼範例示範如何查核 Controls 集合。此範例假設 ASP.NET Web 網頁最少使用一個 TextBox 控制項,並使用 LabelButton 控制項。程式碼取得 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 Form 控制項識別