如何关闭一个特定的窗体在我的项目,如果它曾经出现
本文关键字:项目 我的 如果 曾经 窗体 何关闭 一个 | 更新日期: 2023-09-27 18:11:20
在我的项目中,第一个表单是Login表单,当用户尝试登录系统时,它只出现一次。如果登录成功,则显示系统的主表单并隐藏登录表单,如果登录尝试失败,则用户可以再尝试一次,等等。
问题是当用户在主表单想要使用X按钮关闭程序时,登录表单的FormClosing事件的消息出现,它在用户按下Yes的情况下注销,但是当用户按下NO时,程序不关闭,但它返回到隐藏的登录表单登录表单中FormClosing事件的代码为:
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在logout messageBox中并保持在其当前状态,一旦用户登录到系统的登录表单关闭不隐藏。关于
如果您不想在 loginfm_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(); }
}
}
尝试添加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;
}
}
我有一个更好的解决方案来显示登录表单。
在项目的Main功能中显示您的登录表单,然后在登录表单中检查用户,然后将DialogResult
设置为OK并关闭登录表单。如果登录表单返回,并且对话结果为OK,则显示主表单。
static void Main()
{
var frm = new frmLogin().ShowDialog();
if (frm == DialogResult.OK)
Application.Run(new frmMain());
}
这样,登录表单在主表单之前关闭。
如果需要Logout功能,可以重新显示登录表单并再次使用dialgresult。在主表单中使用这个函数:
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();
}
}