轻松关闭表格

时间:2011-12-15 03:48:51

标签: c# winforms forms

这个问题可能听起来很简单,但我找不到我正在寻找的答案。 我有一个Login_Form和一个Main_Form。 一旦我登录到Main_Form,我就让它可见并激活它,因为我不希望我的Login_Form关闭。 我的问题是,有没有办法从Main_Form同时关闭两个表单? this.Close();只会关闭当前表单。

if (access)
{
    Main_Form mainForm = new Main_Form();
    mainForm.Visible = true;
    mainForm.Activate();
}

这是我实例化main_form的地方我如何传递对login_form的引用? 提前感谢并记住Login_Form必须保持打开状态,直到我从Main_Form关闭它!

反馈

在查看我将使用哪些答案后,我发现了关闭所有表格的Application.Close()方法。应该在发布之前教会这个,谢谢大家。

4 个答案:

答案 0 :(得分:3)

如果您的主表单有对Login表单的引用,您可以在其上调用close方法。你是怎么做到的,取决于你。

  • 您可以在显示时从登录表单中将引用传递给Main。
  • 您可以保留对登录表单的全局引用。 (想想singleton
  • 您能想到的任何其他方式

例如:

public class MainForm : Form
{
    Form loginform;
    public MainForm(Form loginForm)
    {
        this.loginForm = loginForm;
    }

    public void CloseForms()
    {
        loginForm.Close();
        this.Close();
    }
}

在您的Active()方法中,只需传入登录表单。或者您可以使用上面的代码,只需将this传递给构造函数而不是Active()方法。

public class MainForm : Form
{
    Form loginform;
    public Active(Form loginForm)
    {
        this.loginForm = loginForm;
    }

    public void CloseForms()
    {
        loginForm.Close();
        this.Close();
    }
}

//from the LOGIN form
if (access)
    {
        Main_Form mainForm = new Main_Form();
        mainForm.Visible = true;
         mainForm.Activate(this); //this is a reference to the current form. LOGIN in this case

     }

答案 1 :(得分:1)

如果您有对登录表单的引用,请在该表单上调用Close

Login_Form.Close()

您将修改Main_Form的构造函数以接受登录表单实例作为参数

答案 2 :(得分:1)

您也可以使用AddOwnedForm方法。

从上面链接:

  

当表单由另一个表单拥有时,它将被关闭或隐藏   业主表格。例如,考虑一个名为Form2的表单   一个名为Form1的表单。如果Form1关闭或最小化,Form2也是   关闭或隐藏。所拥有的表格也永远不会显示在他们的背后   业主表格。您可以使用窗口的自有窗体,例如find和   替换不应显示在所有者表单后面的窗口   选择所有者表单时。

代码:

Form loginForm = new Form();
this.AddOwnedForm(loginForm);
loginForm.Show();

编辑:

Form mainForm = new Form();
mainForm.Visible = true;
mainForm.AddOwnedForm(this);
mainForm.Activate();

现在,如果关闭mainForm,它将关闭两种形式。

答案 3 :(得分:1)

您可以使用Application.Exit();而不是Application.Close();