在我的应用程序中,我有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”%>
答案 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有一种方法可以做到。