使用反射(Reflection)
private void GetControls2(Control fatherControl)
{
//反射
System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
for (int i = 0; i < fieldInfo.Length; i++)
{
listBox1.Items.Add(fieldInfo[i].Name);
}
}
实战 2020-07-02
/// <summary>
/// 遍历窗口的所有控件并改变标题,调用 GetControlsProperty(null)
/// </summary>
/// <param name="fatherControl"></param>
public void GetControlsProperty(Control fatherControl)
{
System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
for (int i = 0; i < fieldInfo.Length; i++)
{
//根据控件名称查找控件,作用根据控件的配置项目,
Control[] myfindcs = this.Controls.Find(fieldInfo[i].Name, true);
for (int j = 0; j < myfindcs.Length; j++)
{
if (myfindcs[j] is UCBtnImg)
{
UCBtnImg d = (UCBtnImg)myfindcs[j];
d.BtnText = "UCBtnImg" + j.ToString();
this.textBox1.AppendText(d.BtnText + "\r\n");
}
if (myfindcs[j] is Button)
{
Button d = (Button)myfindcs[j];
d.Text = "button" + j.ToString();
this.textBox1.AppendText(d.Text + "\r\n");
}
}
//this.textBox1.AppendText(fieldInfo[i].FieldType + "\r\n"); //取得所有控件的类型
}
}
//反射 根据类名称找到对象并改变属性值
Control control = Controls.Find("ucBtnImg3", true)[0];
object o = control.GetType().GetProperty("Text").GetValue(control, null); //取属性
control.GetType().GetProperty("Text").SetValue(control, "text", null); //设置属性
this.textBox1.AppendText(o.ToString() + "\r\n");
if (control is UCBtnImg)
{
UCBtnImg d = (UCBtnImg)control;
this.textBox1.AppendText(d.BtnText + "\r\n");
}