【问题标题】:Find Textbox control查找文本框控件
【发布时间】:2010-12-14 10:35:00
【问题描述】:

在我的应用程序中,我有 50 个文本框,我想使用代码找到所有文本框控件,并且我想在进行某些验证后在文本框中执行颜色更改。我怎样才能做到这一点?我使用了以下代码,但它不能正常工作

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

【问题讨论】:

  • 对我来说是正确的,但需要注意的是这不会进行递归搜索,因此如果您的页面中有容器控件,则不会找到其中的任何文本框。 “不能正常工作”是什么意思?
  • 我认为 Oded 是对的,您很可能已将它们放在容器控件中
  • @Oded iam 仅获得 Page.Controls 中的主控件我没有获得其他控件
  • @Mathew Paul - 你能发布(简化版)你的 aspx 吗?至少我们可以看到页面是什么样子的?

标签: c# asp.net


【解决方案1】:

我最近开始使用“现代”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 ;) }

问候,
5arx

【讨论】:

  • 我收到消息,扩展方法必须定义在非静态泛型类中。
【解决方案2】:
protected void setColor(Control Ctl)
{
    foreach (Control cntrl in Ctl.Controls)
    {
         if (cntrl.GetType().Name == "TextBox")
         {
              //Do Code
         }
         setColor(Control cntrl);
    }
}

然后您可以使用 setColor(Page) 调用它

【讨论】:

  • @Madhur 是,但它在它找到的每个控件中搜索,而不是在 pages.controls 集合中搜索
  • 您可以将 setColor(Control ctrl) 调用放入 else{},因为您不能在文本框中包含文本框。
【解决方案3】:

这个是递归的,所以它将在页面中的所有控件上运行。 请注意,如果您也希望它遍历数据绑定控件中的文本框,您可能应该在 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);
    }
}

【讨论】:

    【解决方案4】:

    您可能必须递归地遍历每个容器。这个article 有一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多