检测子窗体何时关闭
Detect when a child form is closed
我有以下表格:
- 创建 Form1 时调用的初始化函数。
- 打开另一个窗体 (Form2) 的按钮
我需要的是不仅在创建 Form1 时调用 Initialize()
,而且在关闭 Form2 时调用 Initialize()
,因为 Form2 可能修改了一些东西,使得 Initialize
需要再次调用。
如何检测 form2 何时关闭?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Initialize();
}
void Initialize()
{
// Read a config file and initialize some stuff
}
// Clicking this button will open a Form2
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2().Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
// some stuff that Form2 does which involves modifying the config file
}
}
您只需要为 FormClosing 事件添加一个事件处理程序,该处理程序可以是您的第一个表单 class,您可以在此处调用该表单的每个内部方法 class
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.FormClosing += childClosing;
form2.Show();
}
private void childClosing(object sender, FormClosingEventArgs e)
{
Initialize();
....
}
除了 Steve 的出色回答之外,您还可以考虑将 Form2 显示为 模态对话框。这将意味着 Form1 中的代码执行停止,直到 Form2 被关闭。这可能适用于您的应用程序,也可能不适用于您的应用程序,我们不知道它的作用。
无论如何,你会像这样使用 ShowDialog() 而不是 Show()
:
// Clicking this button will open a Form2
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2().ShowDialog(); // <-- code STOPS here until form2 is closed
Initialize(); // form2 was closed, update everything
}
我有以下表格:
- 创建 Form1 时调用的初始化函数。
- 打开另一个窗体 (Form2) 的按钮
我需要的是不仅在创建 Form1 时调用 Initialize()
,而且在关闭 Form2 时调用 Initialize()
,因为 Form2 可能修改了一些东西,使得 Initialize
需要再次调用。
如何检测 form2 何时关闭?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Initialize();
}
void Initialize()
{
// Read a config file and initialize some stuff
}
// Clicking this button will open a Form2
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2().Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
// some stuff that Form2 does which involves modifying the config file
}
}
您只需要为 FormClosing 事件添加一个事件处理程序,该处理程序可以是您的第一个表单 class,您可以在此处调用该表单的每个内部方法 class
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.FormClosing += childClosing;
form2.Show();
}
private void childClosing(object sender, FormClosingEventArgs e)
{
Initialize();
....
}
除了 Steve 的出色回答之外,您还可以考虑将 Form2 显示为 模态对话框。这将意味着 Form1 中的代码执行停止,直到 Form2 被关闭。这可能适用于您的应用程序,也可能不适用于您的应用程序,我们不知道它的作用。
无论如何,你会像这样使用 ShowDialog() 而不是 Show()
:
// Clicking this button will open a Form2
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2().ShowDialog(); // <-- code STOPS here until form2 is closed
Initialize(); // form2 was closed, update everything
}