日期:2014-05-20  浏览次数:20792 次

困惑问题:mdi窗体,父窗体控件如何调用子窗体内的控件的事件处理程序
如题:如题:父窗体上有一工具栏按钮BUTTON1,子窗体上有一TEXTBOX2和BUTTON2,BUTTON1按钮按下后,调用BUTTON2的事件处理程序.

BUTTON2的事件处理程序:
private   void   button2_Click(object   sender,   System.EventArgs   e)
{
TextBox2.text= "调用成功 ";
                                      }

我把button2_Click变成PUBLIC后还是不对,请高手解答.还有人说是要将子窗体作为参数传入父窗体,在子窗体内声明一个公有的EVENT,但我不知如何调用,请给点代码.

------解决方案--------------------
设你的子窗体为FromSub,则在主窗体的Button1的Click事件中写如下的代码:
private void button1_Click(object sender, EventArgs e)
{
FormSub f = this.ActiveMdiChild as FormSub;
if (f != null)
{
f.callButtonclick();
}
}
在FromSub中编写如下的代码:

internal void callButtonclick()
{
//以下的两个语句都可以实现调用button1_Click事件.
//button1.PerformClick();
button1_Click(this.button1, new EventArgs());
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show( "调用成功! ");
}

按上面说的写好代码后运行试试看成功不!
------解决方案--------------------
那就这样写就可以了,不用你写的这么麻烦
mainForm中两个button,分别为button1和button2
private void button1_Click(object sender, EventArgs e)
{
mdiForm3 temp = new mdiForm3();
button2.Click += new EventHandler(temp.button1_Click);
temp.Show();
}

mdi窗体中的button如下:注意是public的
public void button1_Click(object sender, EventArgs e)
{
MessageBox.Show( "dddd ");
}
以上程序在vs2005下測試通過。