你提的问题就我看来设计思想上就存在问题,
如果你一定要这么做:把 A 的Delegate在Form B 中做为事件解发的话
我写了一个简单的示例:
public class Form1 : Form
{
voidObjectEventArgs voidEvnet ;
public Form1() //这里的Form1就是你的 A
{
//InitializeComponent(); Click +=new EventHandler(Form1_Click);
voidEvnet = new voidObjectEventArgs(Form1_Click) ; Type typ = typeof(B);
ConstructorInfo constructor = typ.GetConstructor(Type.EmptyTypes);
object myForm = constructor.Invoke(null);
EventInfo ei = typ.GetEvent("myClick", BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public);
//MessageBox.Show((ei == null ? "null" : "NoNull"));
Delegate d = Delegate.CreateDelegate( typeof(voidObjectEventArgs), this, "Form1_Click"); //在B窗口调用本窗口的事件
ei.AddEventHandler(myForm, d); B ThisForm2 = myForm as B;
ThisForm2.Text = "B窗口";
ThisForm2.Show();
} void Form1_Click(object sender, EventArgs e) //在B窗口调用本窗口的事件
{
MessageBox.Show("Form1_Click");
}
} public delegate void voidObjectEventArgs(object obj, EventArgs e);
public class B : Form
{
public event voidObjectEventArgs myClick; public B()
{
Click += new EventHandler(Form2_Click); } void Form2_Click(object sender, EventArgs e)
{
if (myClick != null) myClick(sender, e);
}
}//代码可以运行
如果你一定要这么做:把 A 的Delegate在Form B 中做为事件解发的话
我写了一个简单的示例:
public class Form1 : Form
{
voidObjectEventArgs voidEvnet ;
public Form1() //这里的Form1就是你的 A
{
//InitializeComponent(); Click +=new EventHandler(Form1_Click);
voidEvnet = new voidObjectEventArgs(Form1_Click) ; Type typ = typeof(B);
ConstructorInfo constructor = typ.GetConstructor(Type.EmptyTypes);
object myForm = constructor.Invoke(null);
EventInfo ei = typ.GetEvent("myClick", BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public);
//MessageBox.Show((ei == null ? "null" : "NoNull"));
Delegate d = Delegate.CreateDelegate( typeof(voidObjectEventArgs), this, "Form1_Click"); //在B窗口调用本窗口的事件
ei.AddEventHandler(myForm, d); B ThisForm2 = myForm as B;
ThisForm2.Text = "B窗口";
ThisForm2.Show();
} void Form1_Click(object sender, EventArgs e) //在B窗口调用本窗口的事件
{
MessageBox.Show("Form1_Click");
}
} public delegate void voidObjectEventArgs(object obj, EventArgs e);
public class B : Form
{
public event voidObjectEventArgs myClick; public B()
{
Click += new EventHandler(Form2_Click); } void Form2_Click(object sender, EventArgs e)
{
if (myClick != null) myClick(sender, e);
}
}//代码可以运行
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货