フォームのControlsプロパティには画面上の部品の一覧が入っているので、これをループで回せばよい。
たとえば、テキストが「0」ならリンクリストを無効にしたいなら、こん感じ。
たとえば、テキストが「0」ならリンクリストを無効にしたいなら、こん感じ。
foreach (Control x in this.Controls)
{
if (x is LinkLabel)
{
LinkLabel ln = (LinkLabel)x;
ln.Enabled = (ln.Text != "0");
}
}
しかし画面にパネルを貼って、その上にリンクラベルを置いているとうまくいかない。パネルに載っている部品は、フォームのControlsには含まれていないので。
これを解決するには、再帰的に部品を探していくメソッドを作るしかない。
private List<Control> getChildControls(Control ct)
{
List<Control> lst = new List<Control>();
foreach (Control c in ct.Controls)
{
lst.Add(c);
lst.AddRange(getChildControls(c));
}
return lst;
}
LINQを使うともっとスマートにいくのかしら。
コメント
コメントを投稿