简介:
Winform获取当前窗控件的方法介绍。当控件放在容器类的控件中,常规方法this.Controls不会包含所有的控件。
使用
方法一
//第一种,Button控件放在GroubBox等容器控件中,无法获取到
List<Control> list = new List<Control>();
foreach (Control c in this.Controls)
{
list.Add(c);
}
方法二
//第二种,反射获取:所有的都会获取到。建议使用此方法。
System.Reflection.FieldInfo[] field = this.GetType().GetFields(
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public);
IEnumerable<Control> ec = field.Select(s => s.GetValue(this) as Control).Where(s => s != null);
List<Control> list = new List<Control>();
list = ec.ToList();
方法三
List<Control> list = new List<Control>();
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);
}
}