Winform現在のフォームのコントロールを取得

1521 ワード

概要:
Winformが現在の窓コントロールを取得する方法について説明します.コンテナクラスのコントロールにコントロールを置くと、通常の方法はthis.Controlsにはすべてのコントロールは含まれません.
 
使用
方法1
            //   ,Button    GroubBox      ,     
            List list = new List();
            foreach (Control c in this.Controls)
            {
                list.Add(c);
            }

 
方法2
            //   ,    :        。       。
            System.Reflection.FieldInfo[] field = this.GetType().GetFields(
                System.Reflection.BindingFlags.NonPublic |
                System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.Public);

            IEnumerable ec = field.Select(s => s.GetValue(this) as Control).Where(s => s != null);
            List list = new List();
            list = ec.ToList();

 
方法3
        List list = new List();
        private void Form1_Load(object sender, EventArgs e)
        {
            //   ,  
            GetCtl(this.Controls);
        }

        private void GetCtl(Control.ControlCollection ctl)
        {
            foreach (Control c in ctl)
            {
                //     
                if (c is Panel || c is GroupBox)
                {
                    GetCtl(c.Controls);
                }
                list.Add(c);
            }
        }