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

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

たとえば、テキストが「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を使うともっとスマートにいくのかしら。

コメント

このブログの人気の投稿

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