如果它曾经出现,如何关闭我的项目中的特定表单
How to close a specific form in my project if it's once appeared
在我的项目中,第一个表单是 登录表单,当用户尝试登录系统时,它只出现一次。如果登录成功,则系统主窗体出现,登录窗体隐藏,如果登录尝试失败,用户可以尝试其他时间等等..
问题是当 主窗体 中的用户想要使用 X 按钮关闭程序 登录窗体 的消息 FormClosing 事件 在用户按下 Yes 的情况下注销,但是当用户按下 NO 时程序不会关闭但它 returns 到 隐藏的登录表单
FormClosing 事件 在 Login Form 中的代码是:
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
现在 FormClosing 事件 发生在 登录表单和主表单 如何让程序在用户在注销消息框中按下 NO 并保持其当前状态,一旦用户登录系统,登录表单 将关闭而不是隐藏 ..问候
通过添加 base.OnFormClosing(e) 来尝试此打击代码;在你的方法之上
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
base.OnFormClosing(e);
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
我有一个更好的显示登录表单的解决方案。
在项目的主要功能中显示您的登录表单,然后在登录表单中检查用户,然后将 DialogResult
设置为确定并关闭登录表单。如果登录表单 returns 并且 DialogResult 正常显示主表单。
static void Main()
{
var frm = new frmLogin().ShowDialog();
if (frm == DialogResult.OK)
Application.Run(new frmMain());
}
这样登录表单会在主表单之前关闭。
如果你想要注销功能,你可以再次显示登录表单并再次使用DialogResult。在您的主窗体中使用此函数:
private void Logout()
{
var frm = new frmLogin().ShowDialog();
// if new user is not identified.
if (frm == System.Windows.Forms.DialogResult.Cancel)
{
// Close the main form
this.Close();
}
}
如果您不想在 LoginFrm_FormClosing 上显示 messageBox 当一切都关闭时:
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
//Add this lines, your login form is hidden
if (this.Visible == false)
{
return;
}
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false; //<- you dont need this
}
}
并且在MainForm中:
//Add this line
Boolean isClosed = false; //<--
private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
{
//Add this
if(isClosed == true){
return;
}
DialogResult res = MessageBox.Show("Do you want to exit?");
if (res == DialogResult.OK) {
try {
SqlCommand cmd = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn);
cmd.ExecuteNonQuery();
//Add this line
isClosed = true; //<--
Application.Exit();
}
catch (SqlException ex) {
MessageBox.Show(ex.Message);
}
finally { cn.Close(); }
}
}
在我的项目中,第一个表单是 登录表单,当用户尝试登录系统时,它只出现一次。如果登录成功,则系统主窗体出现,登录窗体隐藏,如果登录尝试失败,用户可以尝试其他时间等等..
问题是当 主窗体 中的用户想要使用 X 按钮关闭程序 登录窗体 的消息 FormClosing 事件 在用户按下 Yes 的情况下注销,但是当用户按下 NO 时程序不会关闭但它 returns 到 隐藏的登录表单
FormClosing 事件 在 Login Form 中的代码是:
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
现在 FormClosing 事件 发生在 登录表单和主表单 如何让程序在用户在注销消息框中按下 NO 并保持其当前状态,一旦用户登录系统,登录表单 将关闭而不是隐藏 ..问候
通过添加 base.OnFormClosing(e) 来尝试此打击代码;在你的方法之上
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
base.OnFormClosing(e);
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
我有一个更好的显示登录表单的解决方案。
在项目的主要功能中显示您的登录表单,然后在登录表单中检查用户,然后将 DialogResult
设置为确定并关闭登录表单。如果登录表单 returns 并且 DialogResult 正常显示主表单。
static void Main()
{
var frm = new frmLogin().ShowDialog();
if (frm == DialogResult.OK)
Application.Run(new frmMain());
}
这样登录表单会在主表单之前关闭。
如果你想要注销功能,你可以再次显示登录表单并再次使用DialogResult。在您的主窗体中使用此函数:
private void Logout()
{
var frm = new frmLogin().ShowDialog();
// if new user is not identified.
if (frm == System.Windows.Forms.DialogResult.Cancel)
{
// Close the main form
this.Close();
}
}
如果您不想在 LoginFrm_FormClosing 上显示 messageBox 当一切都关闭时:
private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e)
{
//Add this lines, your login form is hidden
if (this.Visible == false)
{
return;
}
DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (logoutResult == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false; //<- you dont need this
}
}
并且在MainForm中:
//Add this line
Boolean isClosed = false; //<--
private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
{
//Add this
if(isClosed == true){
return;
}
DialogResult res = MessageBox.Show("Do you want to exit?");
if (res == DialogResult.OK) {
try {
SqlCommand cmd = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn);
cmd.ExecuteNonQuery();
//Add this line
isClosed = true; //<--
Application.Exit();
}
catch (SqlException ex) {
MessageBox.Show(ex.Message);
}
finally { cn.Close(); }
}
}