画面のリンクリストだけをまとめて操作する手順

フォームのControlsプロパティには画面上の部品の一覧が入っているので、これをループで回せばよい。

たとえば、テキストが「0」ならリンクリストを無効にしたいなら、こん感じ。

  1.             foreach (Control x in this.Controls)
  2.             {
  3.                 if (x is LinkLabel)
  4.                 {
  5.                     LinkLabel ln = (LinkLabel)x;
  6.                     ln.Enabled = (ln.Text != "0");
  7.                 }
  8.             }


しかし画面にパネルを貼って、その上にリンクラベルを置いているとうまくいかない。パネルに載っている部品は、フォームのControlsには含まれていないので。

これを解決するには、再帰的に部品を探していくメソッドを作るしかない。


  1.         private List<Control> getChildControls(Control ct)
  2.         {
  3.             List<Control> lst = new List<Control>();
  4.  
  5.             foreach (Control c in ct.Controls)
  6.             {
  7.                 lst.Add(c);
  8.                 lst.AddRange(getChildControls(c));
  9.             }
  10.  
  11.             return lst;
  12.         }

LINQを使うともっとスマートにいくのかしら。

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。