我正在使用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并再次显示它,则登录重置;
答案 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
}