如果form2已关闭winform

时间:2017-08-21 14:40:41

标签: c# winforms

我有一个应用程序从第二个表单中获取一组值并将其传递给主表单中的另一个列表。但是如果关闭了form2,则不会传递任何值。因此,我想检测表格2是否已关闭。

目前,我的代码会查看列表是否为空:

User.where(name: 'Joe', email: 'joe@example.com')

但这不是我想要的,我也尝试了以下内容:

if (BoxValues == null)
{
    MessageBox.Show(" stopped!");
    fileProcessBar.Value = 0;
    return;
}

但这只是传递了If语句。我的第二种形式叫做CF有什么想法可以更好地处理这个问题吗?

修改

这只是一个关闭事件,这应该触发,如果表单保存值,它应该移动到if (CF.Isdisposed) { MessageBox.Show(" stopped!"); fileProcessBar.Value = 0; return; } 语句。

3 个答案:

答案 0 :(得分:0)

您正在寻找Visible属性,如果表单被隐藏,则该属性将为false,即使在处理之前也是如此。

答案 1 :(得分:0)

您可以查看Application.OpenForms集合,然后搜索它是否包含一个包含您可能已关闭表单名称的表单。如果你在那里找到了某个东西,那么该形式的一个实例还没有关闭(它也可能被隐藏)

if(Application.OpenForms["CF"] == null)
{   
    MessageBox.Show(" stopped!");
    fileProcessBar.Value = 0;
    return;
}

另一种可能的方法是将第二个窗体关闭事件连接到在主窗体中运行的事件处理程序。此事件处理程序中的代码立即知道表单何时关闭,并可以设置要在if语句中使用的全局类级别变量。但是,如果您不必立即在表单闭包处做出反应,那么第二种方法比在您需要时查看OpenForms集合更麻烦

答案 2 :(得分:0)

您可以使用OpenForms集合来确定表单是否已加载/打开。我相信它在Application类中可用。 https://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms(v=vs.110).aspx