停用Alt+的最佳方法是什么F4在ac#win表单中以防止用户关闭表单?
我正在使用窗体作为弹出对话框来显示进度条,但我不希望用户能够将其关闭。
停用Alt+的最佳方法是什么F4在ac#win表单中以防止用户关闭表单?
我正在使用窗体作为弹出对话框来显示进度条,但我不希望用户能够将其关闭。
Answers:
这可以做到:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
编辑:响应pix0rs的问题-是的,您是正确的,您将无法以编程方式关闭该应用程序。但是,您可以在关闭表单之前简单地删除form_closing事件的事件处理程序:
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
e.Cancel = (e.Reason == CloseReason.UserClosing);
。这样,您可以保证仅在USER尝试关闭表单时不会关闭。
如果你看一下价值的FormClosingEventArgs e.CloseReason
,它会告诉你为什么形式正在被关闭。然后,您可以决定要做什么,可能的值为:
会员名称-说明
无-未确定关闭原因或无法确定关闭原因。
WindowsShutDown-操作系统在关闭之前将关闭所有应用程序。
MdiFormClosing-此多文档接口(MDI)表单的父表单正在关闭。
UserClosing-用户通过用户界面(UI)关闭表单,例如,单击表单窗口上的“关闭”按钮,从窗口的控制菜单中选择“关闭”,或按ALT+ F4。
TaskManagerClosing -Microsoft Windows任务管理器正在关闭应用程序。
FormOwnerClosing-所有者表单正在关闭。
ApplicationExitCall-调用Application类的Exit方法。
CloseReason
,DialogResult
以获得最佳效果。
我相信这是正确的方法:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
e.Cancel = true;
break;
}
base.OnFormClosing(e);
}
这是禁用Alt+的技巧F4。
private void test_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4)
{
e.Cancel = true;
}
}
System.Windows.Forms
,则需要检查staticControl.ModifierKeys
属性,而不是该this.ModifierKeys
属性(如上面的代码段所示)。
这可以做到:
bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
myButtonWasClicked = true;
Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myButtonWasClicked)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
即使您以编程方式关闭窗口,也会调用FormClosing吗?如果是这样,您可能希望添加一些代码以允许在完成表单后关闭该表单(而不是总是取消该操作)