我有一个模态对话框,需要隐藏关闭 (X) 按钮,但我不能使用 ControlBox = false,因为我需要保留最小化和最大化按钮。
我只需要隐藏关闭按钮,有什么办法吗?
虽然您可以禁用关闭按钮,因为此处的答案(以及重复问题)建议通过将CS_NOCLOSE
样式添加到表单的窗口类中,但请非常认真地考虑您是否真的需要这样做。
您仍然必须为用户提供一些关闭模式对话框的方法,大概是对话框本身上的按钮。由于其中一个按钮可能是“取消”或等效按钮,因此您应该让关闭 (X) 按钮执行与“取消”相同的操作。(如果您想自定义默认行为或在关闭时做一些特殊的事情,请为您的表单处理FormClosing
or事件。)FormClosed
请注意,对话框的 Windows UI 指南明确指出,您不应禁用关闭按钮,因为用户希望看到它,这让他们有一种安全感,即他们始终可以安全地“退出”屏幕上弹出的任何内容,如果他们不想要它:
- 对话框总是有一个关闭按钮。无模式对话框也可以有一个最小化按钮。可调整大小的对话框可以有一个最大化按钮。
- 不要禁用关闭按钮。有一个关闭按钮可以帮助用户通过允许他们关闭他们不想要的窗口来保持控制。
- 例外:对于进度对话框,如果任务必须运行到完成才能达到有效状态或防止数据丢失,您可以禁用关闭按钮。
- 标题栏上的关闭按钮应该与对话框中的取消或关闭按钮具有相同的效果。永远不要给它和OK一样的效果。
- 如果标题栏标题和图标已经在窗口顶部附近以突出的方式显示,您可以隐藏标题栏标题和图标以避免冗余。但是,您仍然必须在内部设置合适的标题以供 Windows 使用。
即使有进度对话框(Microsoft 将其称为此一般规则的“例外”),通常也非常希望使操作可取消。
无法隐藏关闭按钮。 尽管您可以通过覆盖表单的CreateParams属性来禁用它。您可以查看如何实现这一点的详细信息[here] 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;
}
}
你能得到的最好的方法是禁用关闭按钮。否则设置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 成员。
来源:禁用表单上的关闭按钮