C#表单不通过switch语句加载
一旦插入用户名和密码,则不会加载相关表单。只有登录屏幕被隐藏/关闭。用户角色/密码/所有内容都是100%正确的。“角色”的输出也是正确的。 请告知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 =
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方法中运行。假设登录表单成为主表单,关闭它意味着终止整个应用程序。如果这个条件适合您,首先选择另一个表单而不是登录表单作为主表单。