单击“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();
}
}
}
答案 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 .....
}