0

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

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

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

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

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();
    }

}

}

4

1 回答 1

2

该方法接收 FormClosingEventArgs 参数。在那个论点中有 CloseReason 属性

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

表单可能因多种原因而关闭,包括用户启动的和程序化的。CloseReason 属性指示关闭的原因。

你可以检查这个属性,看看它是否

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 .....
}
于 2013-03-31T16:09:17.270 回答