C# 是否可以禁用";“关闭”;按钮,但仍然能够从其他地方关闭?
我有一个winforms应用程序,我希望程序右上角的close按钮可以最小化程序 我已经能够通过使用表单的C# 是否可以禁用";“关闭”;按钮,但仍然能够从其他地方关闭?,c#,winforms,formclosing,C#,Winforms,Formclosing,我有一个winforms应用程序,我希望程序右上角的close按钮可以最小化程序 我已经能够通过使用表单的FormClosing事件来实现这一点,如下所示: this.Hide(); e.Cancel = true; 但不幸的是,这也停止了我在表单上放置的任何其他关闭按钮 是否有办法仅停止右上角的默认按钮,但仍能在其他位置关闭表单?使用此选项可从右上角的表单中禁用“关闭”按钮 public partial class Form1 : Form { const int MfBypos
FormClosing
事件来实现这一点,如下所示:
this.Hide();
e.Cancel = true;
但不幸的是,这也停止了我在表单上放置的任何其他关闭按钮
是否有办法仅停止右上角的默认按钮,但仍能在其他位置关闭表单?使用此选项可从右上角的表单中禁用“关闭”按钮
public partial class Form1 : Form
{
const int MfByposition = 0x400;
[DllImport("User32")]
private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags);
[DllImport("User32")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("User32")]
private static extern int GetMenuItemCount(IntPtr hWnd);
public Form1()
{
InitializeComponent();
var hMenu = GetSystemMenu(Handle, false);
var menuItemCount = GetMenuItemCount(hMenu);
RemoveMenu(hMenu, menuItemCount - 1, MfByposition);
...
}
}
这是一个简单的布尔示例:
bool ExitApplication = false;
private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
switch(ExitApplication)
{
case false:
this.Hide();
e.Cancel = true;
break;
case true:
break;
}
}
因此,当您想关闭应用程序时,只需将ExitApplication设置为true。另一种禁用右上角“X”的方法:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
const int CS_NOCLOSE = 0x200;
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
}
仍然可以使用
this.Close()以编程方式关闭表单
@DanielA.White您能否更具体地说明布尔值如何有帮助?谢谢。对不起,但对我来说它看起来有点太复杂了。我想知道我在用什么,而不仅仅是复制别人的作品,谢谢!这只是user32的本地DLL方法调用。@user3573985这实际上是你的学校作业吗?是吗?现在是仲夏,谁现在有作业?xD我只是在自学,还没走多远。更好的方法是在FormClosingEventArgs
中检查CloseReason