0

RadTextBoxのすべての境界線を黒に変更しようとしています。foreachループの構造は正しいと確信していますが、RadTextBoxを見つけることができません。

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.ControlsNamingContainer

のような子コントロールに他のテキストボックスがある場合、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 に答える