我怎么能隐藏我的第二个表格对话而不关闭我的第一个表格?

时间:2014-01-23 02:20:15

标签: c# winforms forms visual-studio-2012 login

我正在使用Visual Studio 2012.我创建了两个表单,form1带有一个按钮来打开form2,form2有一个按钮“exit”,它将带我回到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的状态不变。我的form1包含一个登录表单,如果登录正确,它只启用按钮(例如新表单按钮)。因此,如果我隐藏form1并再次显示它,则登录重置;

2 个答案:

答案 0 :(得分:1)

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();
}

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

答案 1 :(得分:0)

为什么不在主窗体的form_load事件中处理登录。每次表单重新获得焦点时,form_load都不会运行。如果他们没有在加载时登录,是否适合关闭它们?在我的情况下,我向域管理员发送一封带有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
    }