我正在尝试在登录表单成功登录后切换Windows表单,我转到主表单。问题是,一旦用户通过单击登录按钮登录,主表单将打开但登录表单将保留在后台,不会消失。我试过this.hide()和this.close,但它们不起作用。这是btnLogin事件中的一些代码...
//connection to access database and checking if the user exist, ...
...
if (!rdr.Read())
{
MessageBox.Show("Wrong username or password.");
}
else
GlobalClass.GlobalVar = true;
GlobalClass.GlobalStr = rdr["user"].ToString();
MainScreen _main = new MainScreen();
_main.ShowDialog();
rdr.Close();
conn.Close();
this.Close();
}
答案 0 :(得分:1)
您正在使用ShowDialog
使用Show
方法,而不是:
_main.Show();
当您使用ShowDialog
时,您的程序将等待,直到您关闭MainForm
并且不会转到下一行。因此,在关闭MainForm
之前,您的第二个表单不会关闭
答案 1 :(得分:0)
最好从Program.cs创建和显示主窗体,然后从主窗体的OnLoad处理程序中显示和处理LoginDialog。
特别是如果从Application.Run创建了LoginDialog,那么关闭它将退出应用程序,因此不太有用。
答案 2 :(得分:0)
您可以hide()
然后close()
但是您必须使用某个事件,而其他人则建议我使用Show()
方法代替ShowDialog()
。
我可能会首先在全局声明主要表单。
MainScreen _main;
然后,当您即将在登录后使用事件向Hide()
显示登录表单,然后在主表单关闭后向Close()
登录表单显示事件。
GlobalClass.GlobalVar = true;
GlobalClass.GlobalStr = rdr["user"].ToString();
_main = new MainScreen();
_main.Load += new EventHanlder(_main_Load);
_main.FormClosed += new FormClosedEventHandler(_main_FormClosed);
_main.Show();
将Main
表单加载的活动抓取到Hide
登录表单,例如:
private void _main_Load(object sender, EventArgs e)
{
this.Hide(); // Hides Login but it is till in Memory
}
将Main
表格结束的活动抓取到Close
登录表单,例如:
private void _main_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close(); // Closes Login and remove this time from Memory
}