スキップしてメイン コンテンツに移動

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

フォームの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を使うともっとスマートにいくのかしら。

コメント

このブログの人気の投稿

SQLでは文字列の前に「N」が必要だ

SQLServerのテーブルにテキストを登録したら一部の文字が文字化けした。環境依存文字だと化けるみたい。

コンボボックスのDataSourceプロパティの使い方

コンボボックスに表示するデータを設定するのを簡単にする工夫をまとめます。コンボボックスのDataSourceプロパティを上手に使いましょう。(2017/8/30追記)