0

しばらくコーディングしていなかったので、動的に追加されたユーザーコントロールからプロパティを取得しようとしていました。

私はこのコードを作成しましたが、これが良い方法であるかどうか、または追加されたユーザーコントロールを見つけるための別のより良い方法があるかどうかを知りたいですか?

if (PlaceHolder1.HasControls())
{
    foreach (Control uc in PlaceHolder1.Controls)
    {
        if (uc.GetType().Name.ToLower() == "spinner_ascx")
        {
            Label1.Text += ((Spinner)c).Name + "<br />";
        }
    }
}
4

1 に答える 1

3

コントロールのタイプがすでにわかっている場合は、名前を比較する必要はありません。

if (PlaceHolder1.HasControls())
{
    foreach (Control uc in PlaceHolder1.Controls)
    {
        if (uc is Spinner)
        {
            Label1.Text += ((Spinner)uc).Name + "<br />";
        }
    }
}

ただし、アクセスしたい場合でName、Name がSpinnerクラスのプロパティにすぎない場合は、それを適切なオブジェクトにキャストする必要があります。

これらのユーザー コントロールを作成した場合は、それらがすべて基本クラスから継承されていることを確認することをお勧めします。

public abstract class MyControl : UserControl {
   public string Name {get;set;}
}

public class Spinner : MyControl {

}

そうすれば、必要な UserControl ごとにテストする必要はなく、親クラスだけをテストする必要があります。

if(uc is MyControl) {
  Label1.Text += ((MyControl)uc).Name + "<br />";
}
于 2013-09-16T12:10:06.210 に答える