Winfrom程序中如何不通过获取所有控件的id来获取所有控件的Text文本的值

Winfrom程序中如何不通过获取所有控件的id来获取所有控件的Text文本的值

用父控件循环子控件,或者子控件Text的值即可

获取text不用id,但是循环遍历是需要的

https://bbs.csdn.net/topics/310047728?

很多年前的东西,循环构造IEnumerable,然后你可以用linq查询了,where(p=>p is TextBox || p is label).Select(p=>p.Text)

这么多年了,我修改一下老p东西

 var 你要的结果 = this.Controls.AsFlat<Control>(p => p.Controls).Select(p => p.Text).ToList();

            //这种东西当然也可以应用到所有层级数据,比如 treenode

            TreeView tv = new TreeView();
            var test = tv.Nodes.AsFlat<TreeNode>(tn => tn.Nodes);
public static class  ControlExtension
    {
        //把老p的换个名字,这东西以前没名字,现在其实有名字,叫层级数据结构扁平化
        //所以我这里就写成FlatCotnrols,同时把其实所有层级数据都行
        //我们可以写成通用
        public static IEnumerable<T> AsFlat<T>(this IEnumerable Controls,Func<T,IEnumerable> Chirldsfun)
        {
            foreach (T control in Controls)
            {
                yield return control;

                foreach (T x1 in Chirldsfun(control).AsFlat<T>(Chirldsfun))
                {
                    yield return x1;
                }
            }

        }
    }