1.概要
场景:有些时候我们需要根据model更新ui的值,值时候model和控件间会有一定的规律性,这时候用反射的方法可以很容易的处理控件和model之间的绑定。所以有了这个试验
要点:获取私有自动,最开始使用如下的方法并未生效。
FieldInfo fieldInfo = t.GetField("label1", BindingFlags.NonPublic);
根据下面的注释,感觉包含了非公共成员,应该没有问题。
//
// 摘要:
// 指定非公共成员要包括在搜索中。
NonPublic = 32,
加上了如下的属性,才把私有成员取出来
//
// 摘要:
// 指定实例成员要包括在搜索中。
Instance = 4,
2.代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 反射获取窗体控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Type t = this.GetType();
FieldInfo fieldInfo = t.GetField("label1", BindingFlags.Instance |BindingFlags.NonPublic);
Label label = (Label)fieldInfo.GetValue(this);
label.Text = "ddd";
}
}
}
3.运行结果
4.工程
5.引用