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