2011-12-17 3 views
-1

PictureBoxコントロールのImageプロパティをList<Control>に使用できないことがわかりました。リストからさらに派生したコントロールクラスのプロパティにアクセスする方法<Control>?

私はこのような何かをしたい:

List<Control> pictureboxes = new List<Control>(); 

    private void button1_Click(object sender, EventArgs e) 
    { 
     foreach (var picturebox in pictureboxes) 
     { 
      picturebox.Image = WindowsFormsApplication1.Properties.Resources.image; 
     } 
    } 

私は何とかそれを行うことができますか?リスト(Control)の基本型がImage性質を持っていないので、あなたがList<Control>コンテナにそれらを配置するとき、あなたのPictureBoxコントロールのImageプロパティにアクセスすることはできません

+0

はい!あなたはできる。何か問題がありますか? – adatapost

+0

キャストする必要があると言えば、デザインが不適切であることを示すことがありますが、FormsではAPIを使用するとそれを避けるのが難しくなります。なぜ 'PictureBox'にアクセスしたいのですか?' List 'を使うのはなぜですか? –

答えて

1

理由があります。

しかし、プロパティは消えませんでした。オブジェクトをControlからより派生したクラスPictureBoxにキャストするだけです。次に、どのようなメソッドを呼び出したり、必要なプロパティにアクセスしたりすることができます。例:

List<Control> MyList = new List<Control>(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (Control ctrl in MyList) 
    { 
     // Try to cast the Control object to a PictureBox 
     PictureBox picBox = ctrl as PictureBox; 
     if (picBox != null) 
     { 
      picBox.Image = WindowsFormsApplication1.Properties.Resources.image; 
     } 
    } 
} 
+0

LINQの場合: 'foreach(mybox.OfTypeの中のvar pbox ()){pbox.Image = ...})'。 –

関連する問題