是否可以禁用“关闭”功能?按钮,同时仍然能够从其他地方关闭

本文关键字:方关闭 其他 按钮 关闭 功能 是否 | 更新日期: 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();编程关闭