0

ASP.NETアプリで作業している場合、プロジェクトはページからコントロールを見つける必要があります。次の構文を使用して、ページからコントロールを見つけます。

public static Control FindControlRecursive(Control Root, string Id)
{
    Control FoundCtl = new Control();
    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        if (FoundCtl != null && FoundCtl.ID == Id)
        {
            
            Type ty = FoundCtl.GetType();
            var r = FoundCtl as ty; 
            
            //var r = FoundCtl as  Telerik.Web.UI.RadComboBox;   
        }

        FoundCtl = FindControlRecursive(Ctl, Id);

        //if (FoundCtl != null)
        //    return FoundCtl;
    }

    return FoundCtl;
}

コントロールからコントロール値を取得するには、キャストする必要があります。キャストの場合、以下の構文を使用します

FoundCtl as TextBox;
                

ファインドコントロールを以下のようにキャストすることは可能ですか?

Type ty = FoundCtl.GetType();
var r = FoundCtl as ty;
4

2 に答える 2

1

最も適切な方法は次のとおりです。

TextBox textBox = FindControl("name") as TextBox;
if (textBox != null)
{
    // use it
}

なぜそれはあなたのために働かないのですか?


また、拡張メソッドを使用して、特定のタイプのコントロールを再帰的に見つけることができます。

public static IEnumerable<Control> GetChildControls(this Control control)
{
    var children = (control.Controls != null) ? control.Controls.OfType<Control>() : Enumerable.Empty<Control>();
    return children.SelectMany(c => GetChildControls(c)).Concat(children);
}

使用法:

var textBoxex = this.GetChildControls<TextBox>();
于 2012-12-06T05:43:24.887 に答える
0

このような方法でこれを行うことはできません。すべてのキャスト演算子は、System.Type型の変数では機能しません。さらに、実行時にリフレクションを使用してこのコントロールを操作する場合は、リフレクションメソッドを使用して操作できます(PropertyInfo.SetValueなど)。しかし、通常、あなたは具体的な制御のタイプが何であるかをはっきりと知っています。なぜ実行時にキャストしたいのですか?

于 2012-12-06T05:42:03.120 に答える