0

我只是想将我所有的 RadTextBox 边框更改为黑色。我确定我的 foreach 循环的结构是正确的,但是我找不到任何 RadTextBoxes。

我有一个名为 master.Page 的母版页和一个继承该页面的子页,名为 child.aspx。

child.aspx 上有 10 个 radtextbox,但我找不到,我试过.....

foreach (var control in this.Controls.OfType<RadTextBox>())
    {
        control.BorderColor = System.Drawing.Color.Black;
    }
    foreach (var control in this.Page.Controls.OfType<RadTextBox>())
    {
        control.BorderColor = System.Drawing.Color.Black;

}

4

2 回答 2

0

既然您提到您正在使用 MasterPages。你会发现在你的子 aspx 页面顶部的控件不是来自主页面,this.Controls而是通过,contentPlaceHolder1.Controls因为那是NamingContainer.

如果您在子控件中有其他文本框,FormView或者GridView您甚至不会以这种方式找到它们,因为Enumerable.OfType不会递归搜索给定控件的子控件。你可以试试这个递归扩展OfType

public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> fnRecurse)
{
    foreach (T item in source)
    {
        yield return item;

        IEnumerable<T> seqRecurse = fnRecurse(item);
        if (seqRecurse != null)
        {
            foreach (T itemRecurse in Traverse(seqRecurse, fnRecurse))
            {
                yield return itemRecurse;
            }
        }
    }
}

按以下方式使用它:

var allRadTextBoxes = this.Controls.Cast<Control>()
          .Traverse(c => c.Controls.OfType<RadTextBox>());
foreach(var radTextBox in allRadTextBoxes)
{
    radTextBox.BorderColor = System.Drawing.Color.Black;
}
于 2012-11-15T20:54:14.263 回答
0

问题是因为您的控件不是直接在页面上。您的控件位于页面上的表单中。

foreach (var control in this.Page.Form.Controls.OfType<RadTextBox>())
    {
        control.BorderColor = System.Drawing.Color.Black;
    }

您可以在表单中查找控件,也可以使用Tim Schmelter方法递归搜索

于 2012-11-15T20:59:52.013 回答