查找文本框控件

时间:2010-12-14 10:35:01

标签: c# asp.net

在我的应用程序中,我有50个文本框,我想使用代码找到所有文本框控件,我想在执行某些验证后在文本框中执行颜色更改。我怎么能实现这一点?我使用以下代码,但它无法正常工作

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

<%@ Page Language =“C#”MasterPageFile =“〜/ HomePageMaster.master”AutoEventWireup =“true”     CodeFile =“Default.aspx.cs”Inherits =“Default”Title =“Sample Page”%>

4 个答案:

答案 0 :(得分: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;  
            }  
     }  
}`  

然后你可以在webform / control中调用它:

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

foreach(Checkbox chbx in formCtls){

//do what you gotta do ;) }

的问候,
5arx

答案 1 :(得分:1)

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

然后您可以使用setColor(Page)

调用它

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

您可能需要以递归方式遍历每个容器。这个article有一种方法可以做到。