HOW TO:逐一查看控制項集合以尋找頁面上的 Web Form 控制項
更新:2007 年 11 月
網頁上的每個容器控制項和網頁本身,都具有可以用來取得個別控制項的 Controls 集合。
若要在 Controls 集合中尋找控制項
在容器控制項的 Controls 集合上執行迴圈。集合的型別是 ControlCollection,傳回的物件型別是 Control。
下列程式碼範例示範如何查核 Controls 集合。此範例假設 ASP.NET Web 網頁最少使用一個 TextBox 控制項,並使用 Label 和 Button 控制項。程式碼取得 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; } }