winform查找控件

        /// <summary>
        /// 查找指定类型控件
        /// </summary>
        /// <typeparam name="T">待查找控件类型</typeparam>
        /// <param name="ctl">控件所在容器</param>
        /// <param name="act">找到后执行的操作</param>
        private void FindCtl<T>(Control ctl, Action<T> act) where T : Control
        {
            T tmp = null;
            Stack<Control> ctls = new Stack<Control>();
            for (int i = 0; i < ctl.Controls.Count; i++)
            {
                if (ctl.Controls[i].Controls.Count > 0 || (ctl.Controls[i] as T) != null)
                {
                    ctls.Push(ctl.Controls[i]);
                }
            }

            do
            {
                Control tmpCtl = ctls.Pop();
                tmp = tmpCtl as T;
                if (tmp == null && tmpCtl.Controls.Count > 0)
                {
                    for (int i = 0; i < tmpCtl.Controls.Count; i++)
                    {
                        ctls.Push(tmpCtl.Controls[i]);
                    }
                }
                if (tmp != null)
                {
                    act(tmp);
                }
            } while (ctls.Count > 0);
        }
原文地址:https://www.cnblogs.com/coder-soldier/p/12924388.html