是否可以禁用“关闭”功能?按钮,同时仍然能够从其他地方关闭
本文关键字:方关闭 其他 按钮 关闭 功能 是否 | 更新日期: 2023-09-27 18:08:03
我有一个winforms应用程序,我想在程序的右上角关闭按钮,而不是最小化程序。
我已经能够通过使用表单的FormClosing
事件实现这一点,像这样:
this.Hide();
e.Cancel = true;
但不幸的是,这也阻止了我在表单上放置的任何其他关闭按钮。
是否有一种方法可以只停止右上角的默认按钮,但仍然能够在其他地方关闭表单?
这是一个简单的布尔示例:
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
使用此选项来禁用窗体右上角的关闭按钮。
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);
...
}
}
另一种禁用右上角"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();
编程关闭