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


151

我有一个模式对话框,并且需要隐藏“关闭(X)”按钮,但是我不能使用 ControlBox = false,因为我需要保留“最小化”和“最大化”按钮。

我只需要隐藏“关闭”按钮,有什么办法吗?

非常感谢!

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


这可能是您想要的吗:[在C#.NET中隐藏Win Forms的关闭按钮[X]](sameeramrutia.wordpress.com/2008/09/16/…)刚刚在Google搜索:hide close button c#,第二个结果在这里!=)
Miguel Angelo

你错了,我不想禁用按钮,但是隐藏它..你能找到解决方案吗?
stefano m

8
需求是一个有力的词。这个要求从哪里来?实际要求是什么?用户不能终止程序,或者UI“看起来好像没有关闭按钮”?因为还有其他解决方法,所以您将很难完全关闭所有这些方法(例如任务管理器,taskkill,可能的alt + f4等)。我个人不会为此付出太大努力,因为除非您重新调整整个应用程序的外观,否则这将是浪费的精力,并且会破坏用户对其他Windows程序的期望/连续性。
Merlyn Morgan-Graham

4
@Sayem会显示此页面,所以请不要这么批评。
Brian Graham

1
也从列表中删除最小化按钮。最小化模式对话框将自动使其关闭。必要时,它是唯一仍启用的窗口。当您最小化它时,将没有任何窗口仍然可以获取焦点,因此用户无法返回到您的程序。您现在处于“这仍然有意义吗?” 领土。没有。
汉斯·帕桑

Answers:


148

您无法隐藏它,但是可以通过覆盖表单的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


谢谢,我找到了这个解决方案,但我们想隐藏它,而不仅仅是禁用:(任何感谢!
stefano m

4
除了从头开始设计表单外,没有其他方法。
丹尼尔·A·怀特

是的 最好使用没有关闭按钮的控制箱来制作自己的表单,然后隐藏父表单的控制箱。
巴哈姆特

“ Abhishek.Chopra”的回答简单有效。
Altaf Patel 2015年

如何在运行时再次启用它?
Mike de Klerk 2015年

158

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


29
您是否在他指定这不是选择的地方阅读了这个问题?
Servy

28
做了一次Google搜索,此质量检查质量最高。而这个答案正是我想要的。谢谢你Abhishek ...
Abel Gaxiola

15
这将隐藏所有这些大小调整按钮。不只是十
富Shealer

1
非常感谢!最简单的方法。

26

好了,您可以通过删除整个系统菜单来隐藏它:

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

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

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

最后的选择是自己绘制非客户区域。很难做到这一点。


4
这也很好,太棒了!但是,ControlBox = false很容易用作您的方式。
simmeone'2

1
这与设置ControlBox为false 相同。此外,它没有达到要求:我需要保留“最小化”和“最大化”按钮
whiteshooz


8

如果您真的想隐藏它(如“不可见”所示),则可能必须创建一个无边界的表单并自己绘制字幕组件。VisualStyles库具有可用的Windows元素。您还必须添加重新调整表单大小或通过抓住标题栏来移动表单的功能。更不用说角落里的系统菜单了。

在大多数情况下,很难证明“关闭”按钮不可用,尤其是当您需要具有最小化功能的模态表单时。最小化模态形式确实没有任何意义。


2

在表单的属性中,设置“控制框” = False,但也会隐藏“最小化”和“最大化”。


1

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

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

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

干杯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.