Поделиться через


Практическое руководство. Нахождение элементов управления Web Forms на странице в коллекции Controls

Обновлен: Ноябрь 2007

Каждый элемент управления на странице, а также сама страница, имеют коллекцию Controls, используемую для получения отдельных элементов управления.

Нахождение элементов управления в коллекции Controls

  • Просмотрите коллекцию Controls элемента управления контейнером. Коллекция относится к типу ControlCollection и возвращает объекты типа Control.

    В следующем примере показано, как просматривать коллекцию Controls. В этом примере предполагается, что ASP.NET страница Web Forms имеет хотя бы один элемент управления TextBox, Label и Button. Код получает все дочерние элементы управления объекта Page. Поскольку в результате будет получено немного дочерних элементов управления высокого уровня, включая объект HtmlForm, код также просматривает коллекцию Controls каждого отдельного дочернего элемента управления. Код ищет текстовые поля путем сравнения типов всех элементов управления. При нахождении текстового поля он получает значение этого элемента управления и объединяет его в строку, отображаемую в конце элемента управления Label.

    В этом примере выполняется поиск только элементов управления, содержащихся в объекте Page, а также элементов управления, являющихся прямыми потомками страницы. Поиск текстовых полей, дочерних для элемента управления, который, в свою очередь, является дочерним для страницы, не выполняется. Например, если перетащить элемент управления Panel в конструктор, то элемент управления Panel будет дочерним по отношению к элементу управления HtmlForm, содержащемуся в Page, как будет показано в приведенном ниже примере. Но если затем перетащить элемент управления 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 Forms