Gewusst wie: Suchen von Web Forms-Steuerelementen auf einer Seite durch Durchlaufen der Steuerelementauflistung
Aktualisiert: November 2007
Jedes Containersteuerelement auf einer Seite sowie die Seite selbst verfügen über eine Controls-Auflistung, über die Sie einzelne Steuerelemente abrufen können.
So suchen Sie Steuerelemente in der Controls-Auflistung
Durchlaufen Sie die Controls-Auflistung des Containersteuerelements. Die Auflistung ist vom Typ ControlCollection und gibt Objekte des Typs Control zurück.
Das folgende Beispiel zeigt, wie die Controls-Auflistung durchlaufen wird. Das Beispiel geht von einer ASP.NET-Webseite mit mindestens einem TextBox-Steuerelement, einem Label-Steuerelement und einem Button-Steuerelement aus. Der Code ruft alle untergeordneten Steuerelemente des Page-Objekts ab. Da hierbei lediglich einige untergeordnete HtmlForm-Objekte einer höheren Ebene zurückgegeben würden, durchläuft der Code zusätzlich die Controls-Auflistung jedes einzelnen untergeordneten Steuerelements. Der Code sucht nach Textfeldern, indem die Typen aller Steuerelemente verglichen werden. Sobald ein Textfeld gefunden wird, ruft der Code den Wert des Textfelds ab und verkettet ihn in einer Zeichenfolge, die schließlich in einem Label-Steuerelement angezeigt wird.
Im vorliegenden Beispiel werden lediglich die im Page-Objekt enthaltenen sowie die der Seite direkt untergeordneten Steuerelemente gefunden. Die Textfelder, die einem Steuerelement untergeordnet sind, das wiederum der Seite untergeordnet ist, werden nicht gefunden. Wenn Sie der Seite beispielsweise ein Panel-Steuerelement hinzufügen, wird das Panel-Steuerelement dem HtmlForm-Steuerelement des Page-Objekts untergeordnet und daher gefunden. Wenn Sie allerdings dem Panel-Steuerelement ein TextBox-Steuerelement hinzufügen, wird der Text des TextBox-Steuerelements in diesem Beispiel nicht angezeigt, da dieses weder der Seite noch einem der Seite untergeordneten Steuerelement direkt untergeordnet ist. Eine praktischere Möglichkeit, die Steuerelemente auf diese Art zu durchlaufen, wäre das Erstellen einer rekursiven Methode, die bei ihrem Aufruf die Controls-Auflistung jedes gefundenen Steuerelements durchläuft. Das folgende Beispiel wurde allerdings aus Gründen der Übersichtlichkeit nicht als rekursive Funktion erstellt.
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; } }