C#如何反射获取一个winform上的所有的控件的值

现在创建了一个winform;如何通过反射获取其包含的控件的属性值?

 void button1_Click()
{
findallctrls(this, x => { MessageBox.Show(x.Name); });
}
void findallctrls(Control c, Action<Control> a)
{
foreach (Control c1 in c.Controls) findallctrls(c1, a);
a();
}

不需要反射,用controls集合就可以。
void button1_Click()
{
findallctrls(this, x => { MessageBox.Show(x.Name); });
}
void findallctrls(Control c, Action a)
{
foreach (Control c1 in c.Controls) findallctrls(c1, a);
a();
}

控件的属性倒是需要反射
void enumallprop(object obj)
{
foreach (var item in obj.GetType().GetProperties())
{
MessageBox.Show(item + "," + item.GetValue(obj, null));
}
}