我如何隐藏c#窗体中的关闭按钮形式

问题描述:

我有一个模式对话框,并需要隐藏关闭(X)按钮,但我不能使用ControlBox = false,因为我需要保持最小化和最大化按钮。我如何隐藏c#窗体中的关闭按钮形式

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

+1

第一个搜索结果:[Windows窗体:如何隐藏关闭(x)按钮?](http://stackoverflow.com/questions/7301825/windows-forms-how-to-hide-close-x-button) –

+2

允许将对话框最小化是没有意义的。该对话框将关闭。允许最大化对话框没什么意义,只需要足够大就可以显示对话框选项。防止用户关闭对话是没有意义的,特别是当你不使它看起来像对话框时。这只是一个陷阱。使用健全的用户界面实践,你会从Winforms和你的用户几乎没有投诉。 –

隐藏关闭按钮无法完成。 尽管可以通过覆盖表单的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; 
} 

}

+1

制作你自己的表单不会有帮助,它仍然会有一个关闭按钮。 –

+0

@CodyGray我没有说从Form类继承。 – Ehsan

+1

好的,授予。那么你怎样才能在屏幕上显示一个窗口?重点在于Windows创建的任何顶层窗口或弹出窗口都将具有这些控制框,除非您告诉它将其全部隐藏起来。这不仅仅是Form类。 –

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

禁用的关闭按钮,您可以将此代码添加到您的窗体类:

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

说明:

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

来源:Disabling Close Button on Forms

虽然可以禁用关闭按钮,这里的答案(和the duplicate question)已通过将CS_NOCLOSE style窗体的窗口类的建议,认为非常严重,你是否真的需要做的那。

你仍然需要给用户一些关闭模式对话框的方法,大概是使用对话框本身的按钮。而且由于其中一个按钮可能是“取消”或等价物,所以您应该使关闭(X)按钮与“取消”执行相同的操作。 (如果您要自定义默认行为,或者做一些特殊的封闭处理的FormClosingFormClosed事件的形式)。

注意,Windows UI guidelines for dialog boxes明确规定,你不应该因为用户希望看到它禁用关闭按钮并给他们安全感,他们总是可以安全地“走出”的任何突然出现在屏幕上,如果他们不希望它:

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

即使进度对话框,微软称之为出作为一个“例外”这个一般规则,它往往是非常可取的,使操作撤销。

+0

谢谢你的回答。 –