我在C#Windows窗体上使用FormClosing事件要求用户在退出之前进行确认。如果用户使用表单窗口一角的红叉特意关闭表单,我只希望显示此消息。当我手动关闭或隐藏表单时,我不希望显示确认消息(例如,手动调用form.Close())。
是否可以检查用户是否按下红十字?
感谢。
答案 0 :(得分:3)
答案 1 :(得分:2)
如果您以编程方式拨打this.Close()
或让用户点击X,那么两者都会获得CloseReason.UserClosing
,因此这不是有效的检查。
请参阅以下代码,了解" hacky"基本上调用this的解决方案。如果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);
}
}
答案 2 :(得分:0)
您可以查看传递给CloseReason
事件的事件参数的FormClosing
属性。
答案 3 :(得分:0)
使用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
}
答案 4 :(得分:0)
开箱即用,没有一种简单的方法来检测这种行为。虽然有一个“FormClosingEventArgs.CloseReason”属性,您可以检查FormClosing事件,它将不会真正具体说明它关闭的原因。
从MSDN开始,'UserClosing'枚举值的描述为:
用户正在通过用户界面(UI)关闭表单 例如,单击窗体窗口上的“关闭”按钮,选择 从窗口的控制菜单关闭,或按ALT + F4。
因此,您可以看到列出了很多原因,但没有具体说明。
我认为您要做的最好的事情是删除窗口边框(包括按钮)并在其上放置自己的关闭按钮,并捕获其click事件以获得所需的行为。我之前已经看过它,它确实有效,虽然它看起来不像普通的窗口按钮那么“漂亮”。