我在 C# Windows 窗体上使用 FormClosing 事件要求用户在退出前确认。我只希望在用户使用表单窗口一角的红十字专门关闭表单时显示此消息。当我手动关闭或隐藏表单时,我不希望显示确认消息(例如手动调用 form.Close())。
是否可以检查用户是否按下了红十字?
谢谢。
我在 C# Windows 窗体上使用 FormClosing 事件要求用户在退出前确认。我只希望在用户使用表单窗口一角的红十字专门关闭表单时显示此消息。当我手动关闭或隐藏表单时,我不希望显示确认消息(例如手动调用 form.Close())。
是否可以检查用户是否按下了红十字?
谢谢。
如果您以编程方式调用this.Close()
或让用户单击 X,您会得到CloseReason.UserClosing
两者的结果,因此这不是有效的检查。
请参阅下面的代码以获取“hacky”解决方案,该解决方案基本上调用 this.Close 如果 OnClosing 传递了一个null
参数。
private void button1_Click(object sender, EventArgs e)
{
OnClosing(null);
}
protected override void OnClosing(CancelEventArgs e)
{
if (e == null)
{
// Raise your Message or Cancel
this.Close();
}
else
{
base.OnClosing(e);
}
}
您可以检查CloseReason
传递给FormClosing
事件的事件参数的属性。
使用FormClosing
事件处理程序并输入以下简单代码:
if (MessageBox.Show(this, "Do you want to close the Application?", "Exit App", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
e.Cancel = true;
}
else
{
//close app code
}
开箱即用,没有一种简单的方法来检测这种行为。虽然您可以检查 FormClosing 事件的“FormClosingEventArgs.CloseReason”属性,但它并不能真正了解它关闭的原因。
从MSDN中,'UserClosing' 枚举值的描述是:
用户正在通过用户界面 (UI) 关闭表单,例如通过单击表单窗口上的关闭按钮、从窗口的控制菜单中选择关闭或按 ALT+F4。
如您所见,列出了很多原因,但没有一个具体的原因。
我认为您要做的最好的事情是删除窗口边框(包括按钮)并在其上放置您自己的关闭按钮,并捕获其单击事件以获得您想要的行为。我以前见过它,它确实有效,尽管它看起来不像普通的窗口按钮那么“好”。