2010-12-14 92 views
1

在我的應用程序中,我有50個文本框,我想查找所有使用該代碼的文本框控件,並且我想在執行特定驗證後在文本框中執行顏色更改。我該如何實現這個目標?我用下面的代碼,但它不正常工作查找文本框控件

foreach (Control cntrl in Page.Controls) 
    { 
     if (cntrl is TextBox) 
     { 
      //Do the operation 
     } 
    } 

<%@頁面語言= 「C#」 的MasterPageFile = 「〜/ HomePageMaster.master」 AutoEventWireup = 「真」 的CodeFile = 「Default.aspx.cs」繼承= 「默認」 名稱= 「示例頁面」 %>

+2

對我來說看起來很對,因爲這樣做不會進行遞歸搜索,所以如果您的頁面中有容器控件,那麼將不會找到任何文本框。 「你無法正常工作」是什麼意思? – Oded 2010-12-14 10:37:47

+0

我覺得Oded是對的,你最有可能在容器控件中獲得它們 – 2010-12-14 10:39:34

+0

可以通過SO鏈接http://stackoverflow.com/questions/4321458/enumerate-all-controls-in-the-form/4333243# 4333243 – dhinesh 2010-12-14 10:49:00

回答

1
protected void setColor(Control Ctl) 
{ 
    foreach (Control cntrl in Ctl.Controls) 
    { 
     if (cntrl.GetType().Name == "TextBox") 
     { 
       //Do Code 
     } 
     setColor(Control cntrl); 
    } 
} 

然後,您可以用的setColor(頁)稱之爲

+0

@Madhur它只是在它搜索到的每個控件內搜索而不是pages.controls集合 – Matt 2010-12-14 10:56:13

+0

@Matt:它已被編輯。最初,它不是遞歸的。 – 2010-12-14 11:00:01

+0

您可以將setColor(Control ctrl)調用放入其他{}中,因爲您無法在文本框中顯示文本框。我得到的消息是 – Pabuc 2010-12-14 11:01:29

0

你可能會遞歸遍歷每個容器。這article有一個這樣做的方法。

3

我最近開始這樣做'現代'的LINQ方式。首先,你需要一個擴展的方法來抓住你感興趣的所有類型的控件:

//Recursively get all the formControls 
public static IEnumerable<Control> GetAllControls(this Control parent) 
{ 
    foreach (Control control in parent.Controls) 
     { 
      yield return control; 
      foreach (Control descendant in control.GetAllControls()) 
      { 
       yield return descendant; 
      } 
    } 
}` 

然後,你可以把它在你的表單/控制:

var formCtls = this.GetAllControls().OfType<Checkbox>(); 

foreach(Checkbox chbx in formCtls){ 

//do what you gotta do ;) }

Regards,
5arx

+0

,擴展方法必須在非靜態泛型類中定義。 – Fawad 2016-01-02 13:36:48

1

這是遞歸的,所以它會在頁面中的所有控件上運行。 請注意,如果您想讓它遍歷數據綁定控件中的文本框,您應該可以在OnPreRender中調用它。

protected void Page_Load(object sender, EventArgs e) 
{ 
    ColorChange(this); 
} 

protected static void ColorChange(Control parent) 
{ 
    foreach (Control child in parent.Controls) 
    { 
     if (child is TextBox) 
      (child as TextBox).ForeColor = Color.Red; 

     ColorChange(child); 
    } 
}