我的主窗体打开子窗体。当子窗体关闭时,父窗体需要执行一些任务。父级如何知道该子窗体已关闭。
我有一个解决办法-隐藏按钮,当子进程引发closing事件时,我调用PerformeClick方法。
有没有更好的(更正确的)方法呢?
发布于 2018-07-29 23:28:57
实例子窗体时,为主窗体/父窗体添加侦听器事件。示例如下:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.CustomFormClosed += CloseListener;
f2.Show();
}
private void CloseListener(object sender, EventArgs e, string test)
{
Console.WriteLine(test);
}
为自定义委派和事件编辑
Form2代码:
public delegate void CustomFormClosedHandler(object semder, FormClosedEventArgs e, string text);
public event CustomFormClosedHandler CustomFormClosed;
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
CustomFormClosed(sender, e, "Hello World!");
}
发布于 2018-07-29 23:52:26
实现这一点的一种方法是:
从Form2
的FormClosing
事件处理程序返回DialogResult
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.DialogResult = DialogResult.OK;
}
在Form1
的新线程上运行模式ShowDialog()
,并等待DialogResult
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
System.Threading.Tasks.Task.Run(() =>
{
if (f2.ShowDialog() == DialogResult.OK)
{
// do here whatever you want to do
MessageBox.Show("Form2 closed");
}
});
}
发布于 2018-07-30 01:28:12
你要做的就是:
1:在父窗体中添加公共静态方法:
public static void ChildFromClosed()
{
//Inform here
MessageBox.Show("Child form is closed!");
}
2:在子窗体中添加从父窗体调用该方法的(FormClosed)事件:
private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
{
//calling the static method in Parents form
frmParent.ChildFromClosed();
}
https://stackoverflow.com/questions/51585260
复制相似问题