【问题标题】:How I hide close button in c# windows form [duplicate]我如何在 c# windows 窗体中隐藏关闭按钮 [重复]
【发布时间】:2013-07-20 07:36:04
【问题描述】:

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

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

【问题讨论】:

  • 允许最小化对话框是没有意义的。对话框将关闭。允许最大化对话框没有什么意义,它只需要足够大以显示对话框选项。阻止用户关闭对话框没有什么意义,尤其是当你不让它看起来像一个对话框时。那只是一个陷阱。使用合理的 UI 实践,您将不会收到来自 Winforms 和您的用户的投诉。

标签: c# winforms


【解决方案1】:

虽然您可以禁用关闭按钮,因为此处的答案(以及the duplicate question)建议通过将CS_NOCLOSE style 添加到表单的窗口类中,但请认真考虑您是否真的需要这样做。

您仍然必须为用户提供一些 关闭模式对话框的方法,大概是对话框本身上的按钮。由于其中一个按钮可能是“取消”或等效按钮,因此您应该让关闭 (X) 按钮执行与“取消”相同的操作。 (如果您想自定义默认行为或在关闭时执行一些特殊操作,请为您的表单处理 FormClosingFormClosed 事件。)

请注意,Windows UI guidelines for dialog boxes 明确指出您不应该禁用关闭按钮,因为用户希望看到它,这让他们有一种安全感,他们可以随时安全地“退出”屏幕上弹出的任何内容,如果他们不想要它:

  • 对话框总是有一个关闭按钮。 无模式对话框也可以有一个最小化按钮。可调整大小的对话框可以有一个最大化按钮。
  • 不要禁用“关闭”按钮。拥有“关闭”按钮可以让用户关闭不需要的窗口,从而帮助他们保持控制。
    • 例外情况:对于进度对话框,如果任务必须运行到完成才能达到有效状态或防止数据丢失,您可以禁用关闭按钮。
  • 标题栏上的关闭按钮应该与对话框中的取消或关闭按钮具有相同的效果。永远不要给它和 OK 一样的效果。
  • 如果标题栏标题和图标已经以突出方式显示在窗口顶部附近,您可以隐藏标题栏标题和图标以避免冗余。但是,您仍然需要在内部设置合适的标题以供 Windows 使用。

即使有进度对话框(Microsoft 将其称为此一般规则的“例外”),通常也非常希望使操作可取消。

【讨论】:

    【解决方案2】:

    你能得到的最好的方法是禁用关闭按钮。否则设置ControlBox = false 将隐藏所有按钮。

    要禁用关闭按钮,您可以将此代码添加到您的表单类中:

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

    说明:

    在 Form 对象的构造和创建过程中,.NET 会使用 基类中可用的默认创建参数 CreateParams 属性。实际上,CreateParams 属性在 Forms.Control 类。在我们的表单类中(派生自 System.Windows.Forms.Form),覆盖此属性并修改 创建标志。要禁用关闭按钮,请使用 0x200 修改 CreateParams 的 ClassStyle 成员。

    来源:Disabling Close Button on Forms

    【讨论】:

      【解决方案3】:

      无法隐藏关闭按钮。 虽然您可以通过覆盖表单的 CreateParams 属性来禁用它。 您可以查看如何实现此的详细信息[这里]1

      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;
       }
      

      }

      【讨论】:

      • 制作自己的表单没有用,它仍然会有一个关闭按钮。
      • @CodyGray 我没说继承自 Form 类。
      • 好的,同意。那么如何让一个窗口出现在屏幕上呢?关键是任何由 Windows 创建的顶级或弹出窗口都将具有这些控制框,除非您告诉它将它们全部隐藏。不仅仅是 Form 类。
      • @CodyGray 对。更新
      猜你喜欢
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2010-10-19
      • 2015-12-01
      • 1970-01-01
      相关资源
      最近更新 更多