winform反射控件时添加怎么获取获取焦点事件
winform反射控件时添加如何获取获取焦点事件
public static void InitFont(System.Windows.Forms.ContainerControl form)
{
Type fieldType = form.GetType();
FieldInfo[] fieldsInfor = fieldType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
foreach (FieldInfo fi in fieldsInfor)
{
if (fi.FieldType.Name == "TextBox")
{
}
}
}
我获取到如果是文本框就添加一个获取焦点事件
怎么添加这个事件啊
------解决方案--------------------
继续对textbox反射它的事件,然后对事件进行绑定AddEventHandler
------解决方案--------------------
public static void InitFont(System.Windows.Forms.ContainerControl form)
{
Type fieldType = form.GetType();
FieldInfo[] fieldsInfor = fieldType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
foreach (FieldInfo fi in fieldsInfor)
{
if (fi.FieldType.Name == "TextBox")
{
}
}
}
我获取到如果是文本框就添加一个获取焦点事件
怎么添加这个事件啊
------解决方案--------------------
继续对textbox反射它的事件,然后对事件进行绑定AddEventHandler
------解决方案--------------------
- C# code
public void SetEvent(Control parContainer) { for (int index = 0; index < parContainer.Controls.Count; index++) { // 如果是容器类控件,递归调用自己 if (parContainer.Controls[index].HasChildren) { SetEvent(parContainer.Controls[index]); } else { if(parContainer.Controls[index].GetType().Name == "TextBox") { parContainer.Controls[index].GotFocus += 事件名; } } } } public static void InitFont(System.Windows.Forms.ContainerControl form) { SetEvent(form); }
------解决方案--------------------
- C# code
private void Form1_Load(object sender, EventArgs e) { // this.textBox2是窗体上的一个TextBox控件,动态添加焦点事件 EventInfo evt = this.textBox2.GetType().GetEvent("Enter", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public ); evt.AddEventHandler(this.textBox2, new EventHandler(textBox1_Enter)); } //焦点处理事件 private void textBox1_Enter(object sender, EventArgs e) { MessageBox.Show("OK"); }