如何只隐藏关闭(x)按钮?

我有一个模态对话框,需要隐藏关闭(X)按钮,但我不能使用 因为我需要保持最小化和最大化按钮。

我需要隐藏只是关闭按钮,有没有办法做到这一点?

非常感谢!

更新: 我有权限禁用它,这更简单:)谢谢大家!

277815 次浏览

您无法隐藏它,但是可以通过重写窗体的 CreateParams 属性来禁用它。

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
get
{
CreateParams myCp = base.CreateParams;
myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
return myCp;
}
}

资料来源: http://www.codeproject.com/KB/cs/DisableClose.aspx

你可以通过删除整个系统菜单来隐藏它:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style &= ~WS_SYSMENU;
return cp;
}
}

当然,这样做可以删除最小化和最大化按钮。

如果保留系统菜单但删除关闭项,则关闭按钮仍然保留但被禁用。

最后一个选择是自己粉刷非客户区域,这很难做到。

如果您真的想隐藏它,比如“不可见”,那么您可能必须创建一个无边框的表单并自己绘制标题组件。VisualStyles 库具有可用的 Windows 元素。您还必须重新添加窗体大小调整或通过抓取标题栏移动窗体的功能。更别提角落里的系统菜单了。

在大多数情况下,很难证明没有“关闭”按钮是合理的,特别是当您想要一个具有最小化能力的模态表单时。最小化模态形式真的没有意义。

我们可以通过设置 this.ControlBox=false;隐藏窗体上的关闭按钮

注意,这里隐藏了所有的尺寸按钮,不仅仅是 X。在某些情况下,这样做可能没问题。

您可以通过在属性部分中更改 FormBorderStyle 或在构造函数中以编程方式隐藏关闭按钮,方法是:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

然后创建一个菜单条项以退出应用程序。

干杯