如何在winform上单击(红色X)按钮右上方退出应用程序

我的申请表中有两种表格。 frmLoginfrmDash 。 登录后。 我点击登录按钮hiding frmLogin 。 显示frmDash广告。

frmDash ,有frmDash按钮。 点击this.Close() ,我正在使用this.Close()并显示登录表单。 但现在,如果我单击(red X)按钮frmLogin整个应用程序没有终止。 请提出一些建议。 我试过这个:

 private void btnLogin_Click(object sender, EventArgs e) { try { this.Hide(); string Log_API = "http://api.retailbutton.co/WS/Service.php?Service=employeeLogin"; if (LoginUser(Log_API)) { logIn_Status = "true"; GlolbalUtil.LogIn_Status = logIn_Status; frmDash frmDash = new frmDash(); frmDash.Owner = this; frmDash.Show(); txtUsername.Text = ""; txtPassword.Text = ""; //GlolbalUtil.accept_status = "1"; } else { MessageBox.Show("Please Check Username and password"); FrmLogin frmLogin = new FrmLogin(); frmLogin.Owner = this; frmLogin.Show(); } } 

frmDash Logout按钮的frmDash

  private void button1_Click(object sender, EventArgs e) { GlolbalUtil.LogIn_Status = "false"; this.Close(); FrmLogin fl = new FrmLogin(); fl.Show(); } 

您在登录并隐藏表单时创建frmDash的新实例。 然后当你注销时,你会说this.close()并创建另一个新的FrmLogin实例。 不要回到FrmLogin的原始实例。

这意味着您将始终拥有您开始使用的隐藏实例。 (如果关闭FrmLogin的新实例,隐藏的FrmLogin仍然存在。)

您可以在btnLogin_Click中添加以下内容:

 frmDash.ParentForm = this; 

和button1_Click应如下所示:

 private void button1_Click(object sender, EventArgs e){ GlolbalUtil.LogIn_Status = "false"; FrmLogin fl = (FrmLogin)this.Parent; //Prior it said ParentForm this.Close(); fl.Show(); } 

如果您实现此目的,您将显示初始登录表单,当您关闭它时,您将关闭登录表单的初始实例。

@Edit 10:52 25-06-2015无法分配ParentForm并且只读。 解决方案是将其分配给Parent,或者以下内容也可以应用于btnLogin_Click:

 frmDash.Owner = this; 

和button1_Click:

 private void button1_Click(object sender, EventArgs e){ GlolbalUtil.LogIn_Status = "false"; FrmLogin fl = (FrmLogin)this.Owner this.Close(); fl.Show(); } 

@Edit 08:16 29-06-2015(下一个问题)

 private void btnLogin_Click(object sender, EventArgs e) { try { string Log_API = "http://api.retailbutton.co/WS/Service.php?Service=employeeLogin"; if (LoginUser(Log_API)) { logIn_Status = "true"; GlolbalUtil.LogIn_Status = logIn_Status; frmDash frmDash = new frmDash(); frmDash.Owner = this; ////If you hide here, you do not have to make //a new instance when the if statement is not true.//// this.Hide(); frmDash.Show(); txtUsername.Text = ""; txtPassword.Text = ""; //GlolbalUtil.accept_status = "1"; } else { MessageBox.Show("Please Check Username and password"); ////Delete following//// //FrmLogin frmLogin = new FrmLogin(); //frmLogin.Owner = this; //frmLogin.Show(); } } 

使用Application.Exit(); 单击按钮时的方法

将其添加到Designer.cs

 this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.SampleClassName_FormClosed); 

然后右键单击SampleClassName_FormClosed并单击“转到定义”。

然后在创建的类中调用要关闭的表单。

如果您使用自定义按钮,请执行此操作

  private void QuitButton_Click(object sender, EventArgs e) { DialogResult DialogResult = MessageBox.Show("Do you really want to exit?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Hand); if (DialogResult == DialogResult.Yes) Application.Exit();//Here is the code to close everything else //Do stuff } 

如果您使用的是X按钮,请添加FormClosing事件,代码如下所示:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e){ DialogResult DialogResult = MessageBox.Show("Do you really want to exit?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Hand); if (DialogResult == DialogResult.Yes) Application.Exit();//Here is the code to close everything else //Do stuff } 

在您的2.表格上尝试以下内容:

 public partial class Form2 : Form { private bool ForceClose = true; public Form2() { InitializeComponent(); } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { if (ForceClose) Application.Exit(); } private void button1_Click(object sender, EventArgs e) { GlolbalUtil.LogIn_Status = "false"; ForceClose = false; this.Close(); } } 
  private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit();//close the whole program using x (red)button }