错误的表格正在关闭

时间:2013-12-10 15:48:38

标签: c# winforms

为什么在执行此代码时,名为(Smart_pharmacy)的表单将被关闭:

private void LoginBTN_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=Abdullah-PC;Initial Catalog=SmartPharmacyDB;Integrated Security=True");
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText = "select userpass from usertab where username = @username";
    com.Parameters.Add("@username", usernametxt.Text);
    con.Open();
    object returnedvalue = com.ExecuteScalar();

    if (returnedvalue != null)
    {
        string returneduserpass = com.ExecuteScalar().ToString();
        con.Close();

        if (returneduserpass == userpasstxt.Text)
        {
            Smart_Pharmacy f = new Smart_Pharmacy();
            f.Show();
            this.Close();
        }
        else
        {
            MessageBox.Show("Incorrect username or password !");
        }
    }
    else
    {
        MessageBox.Show("Incorrect username or password !");
    }
}

我希望关闭当前表单并保持表单(Smart_Pharmacy)打开请帮助。

4 个答案:

答案 0 :(得分:4)

我假设您的主表单中包含此代码(在Main方法中传递给Application.Run方法的代码)。当主申请表关闭时,所有其他表格也将关闭,申请终止。

您应该做的是将应用程序主窗体更改为Smart_Pharmacy。如果登录失败,请关闭申请。像这样:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    using(LoginForm loginForm = new LoginForm())
    {
        if (loginForm.ShowDialog() != DialogResult.OK)
            return; // exit applicatioin if login failed
    }

    // if login successfully this start main form
    Application.Run(new Smart_Pharmacy());
}

答案 1 :(得分:1)

我想说的是因为你在表单中创建了Smart_Pharmacy表单然后关闭(即销毁)。

所以代码会按照你所说的去做...杀死当前的表单。由于表单被破坏,所有仅在此表单中引用的对象也会被销毁。

如果您希望其他表单保持打开状态,则必须在其他位置保留对其的引用。

PS:在一个不相关的说明中,这段代码太可怕了。你真的不应该从按钮点击等连接到数据库。如果您有能力对此进行修改,我强烈建议您将业务逻辑与UI代码分开。

从技术上讲,这是有效的,但你应该总是尝试保持分层并易于维护。

答案 2 :(得分:0)

更改为

 Smart_Pharmacy f = new Smart_Pharmacy();
 f.ShowDialog(this);
 this.Close();

所以this.Close()将在Smart_Pharmacy表单关闭后执行

如果您需要隐藏主要表单,请在打开this.WindowState = FormWindowState.Minimized;

之前使用Smart_Pharmacy

答案 3 :(得分:0)

我遇到了同样的问题。我猜您的登录表单已设置为您的启动表单。在这种情况下,您需要隐藏它而不是关闭它。