很简单的,首先你需要在父窗体中定义一个委托
namespace WindowsFormsApplication1
{
public delegate void Handled1();//定义一个委托
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//需要子窗体执行的方法
private void ShowForm()
{
MessageBox.Show("Test");
}
private void button4_Click(object sender, EventArgs e)
{
//创建子窗体,并将需要执行的方法传递到子窗体去
Form2 f = new Form2(ShowForm);
f.Show();
}
}
}
然后在子窗体中使用这个委托
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
Handled1 _hand = null;//使用在父窗体中定义的委托
//将委托定义为子窗体的构造器参数
public Form2(Handled1 hand)
{
InitializeComponent();
_hand = hand;
}
private void button1_Click(object sender, EventArgs e)
{
_hand();//调用父窗体中的方法
}
}
}
使用委托相对要麻烦一点,你想简单的话,也可以直接将父窗体传递到子窗体去,像这样改下就行了
Form _form = null;
//将基类定义为子窗体的构造器参数
public Form2(Form from)
{
InitializeComponent();
_form = from;
}
//调用父窗体的方法就变成这样
_form.ShowForm();
当然父窗体中创建子窗体时,就应该这样了
//创建子窗体,并将父窗体传递到子窗体去
Form2 f = new Form2(this);
f.Show();
忘了一点,那个在子窗体调用的方法不能再是private的了,一定要改成public的,这样才能在子窗体中使用。
把父窗体作为参数传递给子窗体。父窗体可以定义一些public控件,把自身控件赋值给它,供子窗体调用。
方式一:
在子窗体中定义 父窗体的引用,使用该引用操作父窗体的功用方法和变量
方式二:
在Progam类中定义static的父窗体引用,这样在所有的子窗体中都可以使用该引用来操作父窗体
比如:
public static MainForm mainForm;
public static Main()
{
.......
mainForm=new MainForm();
Appliection.Run(mainForm);
}
调用时
子窗体中:Program.mainForm.变量=XXX;
建议使用第二种方式
3其它方式:使用构造传递引用方式