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

C# 如何仅隐藏关闭(x)按钮?,c#,winforms,C#,Winforms,我有一个模态对话框,需要隐藏关闭(X)按钮,但无法使用 ControlBox=false,因为我需要保留最小化和最大化按钮 我需要隐藏关闭按钮,有什么办法吗 非常感谢 更新:我有权限禁用它,这更简单:)谢谢大家 您不能隐藏它,但可以通过覆盖表单的CreateParams属性来禁用它 private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParams { get {

我有一个模态对话框,需要隐藏关闭(X)按钮,但无法使用
ControlBox=false
,因为我需要保留最小化和最大化按钮

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

非常感谢


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

您不能隐藏它,但可以通过覆盖表单的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;
    }
}

来源:

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

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;
}
然后创建一个菜单条项以退出应用程序


干杯

谢谢,我找到了此解决方案,但我们希望隐藏它,而不仅仅是禁用:(anywat谢谢!除了从头开始设计表单之外,没有其他方法了。是的。最好使用自己的控件框(不带关闭按钮)创建自己的表单,然后隐藏父窗体的控件框。来自“Abhishek.Chopra”的答案简单而有效。如何在运行时再次启用它?你读过他指定的问题吗这不是一个选项吗?做了谷歌搜索,所以QA是最热门的。这个答案正是我想要的。谢谢阿披舍克…非常感谢!最简单的方法。如果你只想在表单设计器中表单的“Windows样式”部分下显示
X
,请设置以下内容:(1)ControlBox=True,(2)MaximizeBox=False,(3)MinimizeBox=False。这可能是您想要的吗:[在C#.NET中隐藏Win表单的关闭按钮[X]()刚刚在Google上搜索:
隐藏关闭按钮C#
,这里是第二个结果!=)你错了,我不想禁用按钮,但要隐藏它..你能找到解决方案吗?需要是一个强有力的词。这个要求来自哪里?实际要求是什么?用户不能终止程序,或者UI“看起来没有关闭按钮”?因为有其他方法可以解决这一问题,您将很难完全关闭所有这些方法(例如任务管理器、taskkill、可能的alt+f4等)。我个人不会在这方面下太大的功夫,因为除非你无论如何都要剥皮整个应用程序,否则这将是徒劳的,并且会破坏用户对其他Windows程序的期望/连续性。@Sayem它显示了此页面,所以不要这么挑剔。同时,请从列表中划掉“最小化”按钮。最小化模式对话框将自动进行将其关闭。当然,这是唯一一个仍处于启用状态的窗口。当您将其最小化时,将不会有任何窗口仍然可以获得焦点,因此用户无法返回到您的程序。您现在处于“这是否仍然有意义?”territory。它没有。这也很有效,很好!但是ControlBox=false很容易作为您的方式使用。这与将
ControlBox
设置为false相同。而且,它没有满足要求:我需要保留最小化和最大化按钮