https://blog.csdn.net/shigzhu/article/details/128822652
首先感谢这个答主的贡献。
大家可以参考这个答主的方法,经过我测试一类方法
是可用的,因为够我用了后面就没再看,大概率也是对的
(1)一类方法
:在主窗体中创建静态字段
public static Form1 form;
public Form1()
{
form = this;
InitializeComponent();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1.form.Close();
}
(2)二类方法:在入口中创建静态字段
static class Program
{
public static Form1 form;
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
form = new Form1();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(form);
}
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Program.form.Close();
}
方案二:委托——调用方法的引用
如果方案一是调用对象的引用从而间接地调用到对象中对应的方法,那么可不可以直接通过调用方法的引用从而直接得到对应的方法呢?答案是可行的,即把主窗体A当中的Close方法委托给C,让子窗体B在自己的Close方法中调用C(A对应方法的引用)即可完成调用主窗体A中的对应Close方法。
(1)一类方法:自定义委托
①在主窗体中定义一个无返回值无参数的委托。和类平级,定义在类的外部。
//定义委托
public delegate void CloseEventHandler();
②在主窗体中定义对应的Close方法(该方法的返回值、参数类型和委托对应相同)。
public void FormClose()
{
this.Close();
}
③在子窗体的类里面定义一个委托变量。
public CloseEventHandler closeEventHandler;
④子窗体实例化的同时给子窗体中对应的委托变量赋值主窗体中Close方法的引用。
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.closeEventHandler = FormClose;
form.Show();
}
⑤此时在子窗体中调用自己的委托即可调用到主窗体中对应的Close方法
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
if (closeEventHandler != null)
{
closeEventHandler.Invoke();
//简写
//closeEventHandler();
}
//简写
//closeEventHandler?.Invoke();
}
(2)二类方法:委托事件
上述一类方法中的委托也可以完全用系统自带的事件来解决。子窗体在关闭时会触发一个FormClosed事件,只需给这个事件添加一个关联的Close处理方法,在子窗体关闭的同时也会对应调用这个方法。
①主窗体中给FormClosed事件关联一个Close处理方法(方法如②)
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.FormClosed += new FormClosedEventHandler(FormClose);
form.Show();
}
②主窗体中定义一个参数和FormClosedEventHandler委托事件相同的Close方法
public void FormClose(object sender,EventArgs e)
{
this.Close();
}
————————————————
版权声明:本文为CSDN博主「shigzhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shigzhu/article/details/128822652