Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不关闭第一个表单的情况下隐藏第二个表单对话框?_C#_Winforms_Forms_Visual Studio 2012_Login - Fatal编程技术网

C# 如何在不关闭第一个表单的情况下隐藏第二个表单对话框?

C# 如何在不关闭第一个表单的情况下隐藏第二个表单对话框?,c#,winforms,forms,visual-studio-2012,login,C#,Winforms,Forms,Visual Studio 2012,Login,我正在使用Visual studio 2012。我创建了两个表单,form1有一个打开form2的按钮,form2有一个“退出”按钮,它将带我回到form1 这是我在表格1中的代码: private void btnRecords_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.ShowDialog(); this.Hide(); } 从表格2: private void btnEx

我正在使用Visual studio 2012。我创建了两个表单,form1有一个打开form2的按钮,form2有一个“退出”按钮,它将带我回到form1

这是我在表格1中的代码:

private void btnRecords_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.ShowDialog();
    this.Hide();
}
从表格2:

 private void btnExit_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

我知道我可以使用
frm2.Show();this.Hide()而不是
frm2.showdialog()。但是,我需要我的表格1的状态保持不变。My form1包含一个登录表单,仅当登录正确时才启用按钮(如“新建表单”按钮)。因此,如果我隐藏form1并再次显示它,登录将重置

Form2
类中添加一个属性来存储对父窗体的引用:

public Form ParentForm { get; set; }
然后在
Form1
上,您可以通过这种方式显示
Form2
,同时隐藏
Form1

private void btnRecords_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.ParentForm = this;
    this.Hide();
    frm2.ShowDialog();
}
关闭
Form2
时,您可以再次显示
Form1

private void btnExit_Click(object sender, EventArgs e)
{
    this.ParentForm.Show();
    this.Close();
}
或者更好的方法是,通过以下方式关闭
Form2

private void btnExit_Click(object sender, EventArgs e)
{
    this.Close();
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    if (this.ParentForm != null)
        this.ParentForm.Show();
}

如果用户使用标题栏中的交叉按钮关闭
Form2
,这也会显示
Form1

为什么不在主表单的表单加载事件中处理登录。并非每次窗体重新获得焦点时都会运行窗体加载。如果他们没有在加载时登录,是否关闭他们的表单?在我的例子中,我向域管理员发送一封带有windows用户用户名的电子邮件,并关闭该程序。他们必须重新启动该计划,以便再次尝试

    private void frmMain_Load(object sender, EventArgs e)
    {
        //Check login
        Form frmLogin = new Form();
        frmLogin.ShowDialog();
        if (frmLogin.LoginSucessful == true)
        {
            btnRecords.Enabled = true;
            lblWarning.Visible = false;
        }
        else
        {
            btnRecords.Enabled = false;
            lblWarning.Visible = true;
            lblWarning.Text = "You must first Login";
        }
        //other setup code here
    }

因为我的登录屏幕和我的主菜单按钮位于@Grantwiney的同一页面上,所以您必须创建一个包含所有作品的主表单,子表单包含登录表单。所以你可以随时随地从main调用子表单。@Louis.clat抱歉,我对这个概念有点模糊。我只是有不同的表格,表格一,表格二,表格三。我是否必须将一个设置为主要,其他设置为子?它是否会与仅仅拥有多种形式不同?