画面のコントロールをまとめて操作する
画面のコントロールをまとめて何かしたいときの手順。たとえば、リンクラベルを全部無効にしたいとき。(2016/12/21改訂)
LinkLableが文字列なのが今ひとつのような。
ところが、パネルに載っているコントロールはthis.Controlsには含まれないので、悲しいことになる。
仕方がないので、再帰的にすべてのコントロールを得るメソッドを作ってみる。
こんな感じで使う。
メソッドはこんな感じ。
Linqで書くとこんな感じかな。
参考にしたページ。http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
foreach (Control x in this.Controls) { if (x is LinkLabel) { LinkLabel ln = (LinkLabel)x; ln.Enabled = false; } }
ところが、パネルに載っているコントロールはthis.Controlsには含まれないので、悲しいことになる。
仕方がないので、再帰的にすべてのコントロールを得るメソッドを作ってみる。
こんな感じで使う。
foreach (Control x in getAllControls(this)) { }
メソッドはこんな感じ。
/// <summary> /// すべてのコントロールを得る(パネルに載っているコントロールも再帰的に探す) /// </summary> /// <param name="root"></param> /// <returns></returns> static public List<Control> getAllControls(Control root) { List<Control> lst = new List<Control>(); foreach (Control x in root.Controls) { lst.Add(x); lst.AddRange(getAllControls(x)); } return lst; }
Linqで書くとこんな感じかな。
getAllControls(this) .Where(ct => ct is LinkLabel) .ToList().ForEach(ln => ln.Enabled = ln.Text != "0");
参考にしたページ。http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
コメント
コメントを投稿