画面のコントロールをまとめて操作する
画面のコントロールをまとめて何かしたいときの手順。たとえば、リンクラベルを全部無効にしたいとき。(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
コメント
コメントを投稿