【问题标题】:How to hide only the Close (x) button?如何仅隐藏关闭 (x) 按钮?
【发布时间】:2011-11-10 05:41:55
【问题描述】:

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

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

非常感谢!

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

【问题讨论】:

  • 这可能是你想要的吗:[在 C#.NET 中隐藏 Win Forms 的关闭按钮 [X]](sameeramrutia.wordpress.com/2008/09/16/…) 刚刚用谷歌搜索:hide close button c#,第二个结果在这里! =)
  • 需要是一个强有力的词。这个要求是从哪里来的?实际要求是什么——用户不能终止程序,或者用户界面“看起来没有关闭按钮”?因为还有其他方法可以解决这个问题,而且您将很难完全关闭所有这些方法(例如任务管理器、taskkill,可能还有 alt+f4 等)。我个人不会为此付出太多努力,因为除非您无论如何都要重新设计整个应用程序的皮肤,否则这将是浪费精力,并且会破坏用户对其他 Windows 程序的期望/连续性。
  • @Sayem 它显示了这个页面,所以不要这样批评。
  • 也将最小化按钮从列表中划掉。最小化模态对话框将自动使其关闭。必然如此,它是唯一仍然启用的窗口。当您将其最小化时,将不会留下任何仍然可以获得焦点的窗口,因此用户无法返回您的程序。您现在处于“这仍然有意义吗?”领土。它没有。
  • 我迟到了,但我有预感,这个要求来自于希望强制用户以完全由用户代码控制的方式离开对话框,很可能是形式纽扣;也许有人想强迫用户做出明确的选择。 “无取消选项”确实是一个有效的要求吗?用户是否可以不合法地选择撤消使对话框出现的任何单击?如果他不能或不应该:简单地关闭对话框是否可以解释为“不”?

标签: c# winforms


【解决方案1】:

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

请注意,这会隐藏所有这些调整大小的按钮。不只是 X。在某些情况下可能没问题。

【讨论】:

  • 您是否阅读了他指定这不是一个选项的问题?
  • 进行了谷歌搜索,这个 SO QA 是最热门的。而这个答案正是我想要的。谢谢阿布舍克...
  • 非常感谢!最简单的方法。
  • 如果您只想显示X,请在表单设计器的“Windows 样式”部分下为表单设置以下内容:(1) ControlBox = True, (2) MaximizeBox =假,(3)MinimizeBox = 假。
【解决方案2】:

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

【讨论】:

  • 谢谢,我找到了这个解决方案,但我们想隐藏它,而不仅仅是禁用:(无论如何谢谢!
  • 除了从头开始设计表单之外别无他法。
  • 是的。最好用自己的控制框制作自己的表单,不要关闭按钮,然后隐藏父表单的控制框。
  • 来自“Abhishek.Chopra”的答案简单而有效。
  • 如何在运行时再次启用它?
【解决方案3】:

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

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

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

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

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

【讨论】:

  • 这也有效,太棒了!但是 ControlBox = false 很容易作为你的方式使用。
  • 这与将ControlBox 设置为false 相同。此外,它不符合要求:我需要保留最小化和最大化按钮
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

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

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

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

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多