如何禁用表单中的关闭按钮,如下图所示? (下图显示了MessageBox
窗口)
上面的MessageBox
由我生成!我想禁用普通表单的关闭按钮。
答案 0 :(得分:13)
右键单击相关窗口,然后单击“属性”。在Properties下单击Events。双击FormClosing
事件。
Windows窗体设计器将生成以下代码:
private void myWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
只需将代码更新为这样(添加e.Cancel = true;
):
private void myWindow_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
你已经完成了!
或者,如果您要禁用窗口的关闭,最大化和最小化按钮:
您可以右键单击相关窗口,然后单击“属性”。在“属性”下,将ControlBox
属性设置为false
。
答案 1 :(得分:10)
您处理表单的关闭事件(而非Closed事件)。
然后你使用e.CloseReason来决定你是否真的要阻止它(UserClose)(TaskManager关闭)。
此外,Disabling Close Button on Forms上有一个小例子codeproject。
答案 2 :(得分:8)
如果您正在使用MDI子窗口并且在创建窗口期间禁用关闭按钮被排除(即您希望在窗体生命期间的某些时间禁用它),以前提出的解决方案都不会起作用¹。< / p>
相反,我们必须使用以下代码:
[DllImport("user32")]
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32")]
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable);
public static void DisableCloseButton(this Form form)
{
// The 1 parameter means to gray out. 0xF060 is SC_CLOSE.
EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1);
}
public static void EnableCloseButton(this Form form)
{
// The zero parameter means to enable. 0xF060 is SC_CLOSE.
EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0);
}
¹如果您不想要任何按钮,可以设置ControlBox = false
,但这不是问题所在。
答案 3 :(得分:5)
您应该覆盖从CreateParams
System.Windows.Forms.Form
函数
并更改班级风格
myCp.ClassStyle = 0x200;
答案 4 :(得分:1)
Closing += (s, eventArgs) =>
{
DialogResult = DialogResult.None; //means that dialog would continue running
};