C# 在窗体关闭时执行某些操作

C# 在窗体关闭时执行某些操作,c#,winforms,listview,C#,Winforms,Listview,如何检查表单是否已关闭 我想在关闭另一个表单时重新加载listview的项目。 我正在做的是: Form1=具有ListView的表单 Form2=带有文本框的表单 打开一个新表单 通过文本框创建新文件夹 当我在Form2中按“Add”时,我想在Form1上重新加载“ListView” 那我该怎么做呢 很抱歉我的英语不好:(.您可以处理表单事件,因为关闭的事件已过时。如果您在表单1中使用的是高于dot net 1.1的任何内容,您可以订阅From2的事件。如果您只想在关闭特定表单时对其作出反

如何检查表单是否已关闭

我想在关闭另一个表单时重新加载listview的项目。
我正在做的是:

Form1=具有ListView的表单
Form2=带有文本框的表单

  • 打开一个新表单
  • 通过文本框创建新文件夹
  • 当我在Form2中按“Add”时,我想在Form1上重新加载“ListView”
那我该怎么做呢


很抱歉我的英语不好:(.

您可以处理表单事件,因为关闭的事件已过时。如果您在表单1中使用的是高于dot net 1.1的任何内容,您可以订阅From2的事件。

如果您只想在关闭特定表单时对其作出反应,您可以处理
FormClosed
事件。如果您想更进一步,有一个
mClosing
事件,您也可以处理该事件,甚至可以在需要时阻止表单关闭。

最简单的答案是在Form1上创建一个公共方法,我们称之为
RefreshList()
,在Form2上的按钮单击事件中,您只需调用
Form1.RefreshList
。下面是一个快速示例:

表格2:

public Form1 ParentForm { get; set; }

private void Button_Click(object Sender, EventArgs args) {
{
    // After the rest of your handler
    if(ParentForm != null)
        ParentForm.RefreshList();

    Close(); // Close Form2 here, we're done!
}   
表格1:

private void ShowForm2() 
{
    Form2 form2 = new Form2();
    form2.ParentForm = this;
    form2.Show();
}

public void RefreshList() 
{
   // do your refresh here
}

最初您提到希望在Form2关闭时执行此操作,但后来您提到“当我在Form2中按“Add”时,我希望在Form1上重新加载“ListView”正如其他人所提到的,您可以使用
Closed
事件,因此我采用这种方法来解决第二种情况。

让Form1向Form2的
FormClosing
事件添加事件处理程序是一个很好的选择。但是,如果Form2是一个对话框窗口,则有一个更简单的解决方案。换句话说,如果Form1可以如果在显示Form2时有效地锁定和禁用,您只需将Form2显示为一个对话框窗口。对话框窗口同步显示,因此您只需在显示Form2后立即更新列表,直到关闭Form2后,列表更新代码才会出现。例如:

form2.ShowDialog(this);
updateList();

@GrantWinney是的,我想在Form1Closed事件中重新加载listview是过时的,除非您仍在使用.NET 1.0。它实际上在您提供的超链接中说明了很多。哇,您的示例看起来不错!是的,我知道,我的问题有点挑剔:(,但我的意思是当我按“添加”时)按钮,该按钮执行一些代码,然后关闭表单。@Darkshadw稍微调整了示例,以便为ya关闭表单。=)这会起作用,但封装得不太好。例如,如果你想从另一个父窗体重用Form2,如果不作进一步修改,它将不起作用,因为它假定它的父窗体始终是Form1。@SteveDog我明白了,好吧,我将尝试一下,谢谢!@SteveDog是的,这不是超级工程我的解决方案只是想给他一个起点,但你们的观点都是正确的。