C#表单不通过switch语句加载

C#表单不通过switch语句加载,c#,login,switch-statement,C#,Login,Switch Statement,一旦插入用户名和密码,则不会加载相关表单。只有登录屏幕被隐藏/关闭。用户角色/密码/所有内容都是100%正确的。“角色”的输出也是正确的。 请告知 private void btnLogin_Click(object sender, EventArgs e) { try { DataTable result = uc.Login(tbxUserName.Text, tbxPassword.Text); if (result.Rows.Count =

一旦插入用户名和密码,则不会加载相关表单。只有登录屏幕被隐藏/关闭。用户角色/密码/所有内容都是100%正确的。“角色”的输出也是正确的。 请告知

private void btnLogin_Click(object sender, EventArgs e)
{
    try
    {
        DataTable result = uc.Login(tbxUserName.Text, tbxPassword.Text);
        if (result.Rows.Count == 1)
        {
            this.Hide();
            string role = result.Rows[0]["Role"].ToString();

            switch (role)
            {
                case "User":
                    FrmUser fuser = new FrmUser();
                    fuser.ShowDialog();
                    this.Close();
                    break;

                case "Admin":
                    FrmMain fmain = new FrmMain();
                    fmain.ShowDialog();
                    this.Close();
                    break;
            }
        }
        else
        {
            MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

我注意到,与其执行
this.Close()
关闭每个角色的登录表单,不如在成功登录后隐藏该登录表单:

if (result.Rows.Count == 1)
    {
        this.Hide();
        string role = result.Rows[0]["Role"].ToString();

        switch (role)
        {
            case "User":
                FrmUser fuser = new FrmUser();
                fuser.ShowDialog();
                // note that this.Close() removed
                break;

            case "Admin":
                FrmMain fmain = new FrmMain();
                fmain.ShowDialog();
                // note that this.Close() removed
                break;
        }
    }
    else
    {
        MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error);
        Application.Exit(); // optional, use if you want to exit all app window when wrong credentials supplied
    }
并将关闭处理程序放在用户和主窗体上,因此关闭其中一个窗体也将关闭隐藏的登录窗体:

private void FrmUser_FormClosed(object sender, FormClosedEventArgs e)
{
     this.Close();
}

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
     this.Close();
}
参考:


希望您的问题得到解决,CMIIW。

我注意到,与其执行
this.Close()
关闭每个角色的登录表单,不如在成功登录后隐藏该登录表单:

if (result.Rows.Count == 1)
    {
        this.Hide();
        string role = result.Rows[0]["Role"].ToString();

        switch (role)
        {
            case "User":
                FrmUser fuser = new FrmUser();
                fuser.ShowDialog();
                // note that this.Close() removed
                break;

            case "Admin":
                FrmMain fmain = new FrmMain();
                fmain.ShowDialog();
                // note that this.Close() removed
                break;
        }
    }
    else
    {
        MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error);
        Application.Exit(); // optional, use if you want to exit all app window when wrong credentials supplied
    }
并将关闭处理程序放在用户和主窗体上,因此关闭其中一个窗体也将关闭隐藏的登录窗体:

private void FrmUser_FormClosed(object sender, FormClosedEventArgs e)
{
     this.Close();
}

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
     this.Close();
}
参考:


希望你的问题得到解决,CMIIW。

实际上这很奇怪。你能检查一下表格是否打开了,不知何故失去了焦点吗?您可以将以下代码段放在此语句之后执行此操作:

fuser.ShowDialog();
检查表单是否仍处于打开状态的代码:

if (Application.OpenForms[fuser.Name] == null)
{
    MessageBox.Show("Form is not open");
}

希望这能有所帮助。

实际上这很奇怪。你能检查一下表格是否打开了,不知何故失去了焦点吗?您可以将以下代码段放在此语句之后执行此操作:

fuser.ShowDialog();
检查表单是否仍处于打开状态的代码:

if (Application.OpenForms[fuser.Name] == null)
{
    MessageBox.Show("Form is not open");
}

希望这会有所帮助。

您是否将断点放在开关盒附近进行了检查并进行了测试?您是否尝试了
fuser.Show()
而不是
fuser.ShowDialog()
?ShowDialog将返回限制对父窗体访问的模式窗体,直到返回结果:我尝试了。同样的结果。插入密码后,所有内容都会消失,但visual studio显示应用程序仍在运行。是否将断点放在开关盒附近进行检查并进行测试?是否尝试了
fuser.Show()
而不是
fuser.ShowDialog()
?ShowDialog将返回限制对父窗体访问的模式窗体,直到返回结果:我尝试了。同样的结果。一旦我插入密码,一切都会消失,但visual studio显示应用程序仍在运行。感谢您的努力。结果是一样的。感谢您的时间。从现在开始,我仍然无法确定您在应用程序中将哪个窗体设置为主窗体。请在main方法中运行。假设登录表单成为主表单,关闭它意味着终止整个应用程序。如果这个条件适合你,首先选择另一个表单而不是登录表单作为主表单。谢谢你的努力。结果是一样的。感谢您的时间。从现在开始,我仍然无法确定您在应用程序中将哪个窗体设置为主窗体。请在main方法中运行。假设登录表单成为主表单,关闭它意味着终止整个应用程序。如果这个条件适合您,首先选择另一个表单而不是登录表单作为主表单。