切换到另一种形式后无法隐藏或关闭表单

时间:2014-03-13 23:33:50

标签: c# winforms

我正在尝试在登录表单成功登录后切换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();

    } 

3 个答案:

答案 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
}