使用Windows'X'按钮关闭表单

时间:2013-03-31 16:02:35

标签: c#

单击“X”时我的程序没有退出,所以当我查看它时,我得到了这段代码。

protected override void OnFormClosing(FormClosingEventArgs e)
    {
        Application.Exit();
    }

但这会干扰this.Close()方法。

有没有办法在单击“X”时使用此代码,而不是在表单实际关闭时?这似乎是唯一有问题的Form吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PassMan
{
public partial class Passwords : Form
{
    String[,] UandS = { { "Russell", "Hickey" }, { "Junior", "Russ" } };
    public Passwords()
    {
        InitializeComponent();
        for (int i = 0; i < UandS.Length / 2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                if (j % 2 == 0)
                {
                    tbUsernames.Text = tbUsernames.Text + UandS[i, j] + "\r\n";
                }
                else
                {
                    tbPasswords.Text = tbPasswords.Text + UandS[i, j] + "\r\n";
                }
            }
        }
        tbPasswords.PasswordChar = '*';
    }

    private void btnSH_Click(object sender, EventArgs e)
    {
        Properties.Settings.Default.Save();
        if (btnSH.Text == "Show Passwords")
        {
            btnSH.Text = "Hide Passwords";
            tbPasswords.PasswordChar = (char)0;
        }
        else
        {
            btnSH.Text = "Show Passwords";
            tbPasswords.PasswordChar = '*';
        }
    }
    private void btnClose_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void btnLogin_Click(object sender, EventArgs e)
    {
        fLogin main = new fLogin();
        main.Show();
        this.Close();
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        //Application.Exit();
    }

}

}

1 个答案:

答案 0 :(得分:2)

该方法接收FormClosingEventArgs参数。在该参数中有CloseReason属性

CloseReason属性解释了表单关闭的原因....

  

由于各种原因,表格可以关闭   用户启动和程序化。 CloseReason属性表示a   关闭的原因。

您可以检查此属性以查看它是否

  

UserClosing - 用户正在通过用户界面关闭表单   (UI),例如通过单击窗体窗口上的“关闭”按钮,   从窗口的控制菜单中选择关闭,或按ALT + F4。

     

ApplicationExitCall - Application类的Exit方法是   调用

关闭事件的其他原因在上面的链接中解释

所以,如果我理解你的意图,你可以写

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if(e.CloseReason == CloseReason.UserClosing)
       Application.Exit();
    else
       // it is not clear what you want to do in this case .....
}