我被要求从我们的 VB .NET 2005 MDI 应用程序中删除或禁用关闭按钮。表单上没有允许您将关闭按钮变灰的本地属性,因此用户无法关闭它,而且我不记得在表单类中看到任何允许我执行此操作的内容。
在 .NET 2005 或更高版本中是否有要设置或调用的 API 调用或一些神奇的属性来执行此操作?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更多信息:
我需要维护最小化/最大化功能
我需要保持原来的标题栏,因为表单的绘制方法已经很复杂了。
根据您添加到问题中的最新信息,请跳到我的回答末尾。
这是您需要设置为 false 的内容: Form.ControlBox 属性
但是,您将失去最小化和最大化按钮以及应用程序菜单(左上角)。
作为替代方案,覆盖 OnClose 并将 Cancel 设置为 true(C# 示例):
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true;
}
base.OnFormClosing(e);
}
如果这些解决方案都不可接受,并且您必须仅禁用关闭按钮,则可以使用 pinvoke/createparams 路线:
这是jdm代码的VB版本:
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim myCp As CreateParams = MyBase.CreateParams
myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
Return myCp
End Get
End Property
您可以通过更改窗口的“类样式”来禁用系统菜单中的关闭按钮和关闭菜单项。将以下代码添加到您的表单中:
const int CS_NOCLOSE = 0x200;
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
这不仅会阻止窗口关闭,而且实际上会使按钮变灰。它是 C#,但我认为将其转换为 VB 应该很容易。
这是删除关闭按钮的简单方法:
1. 选择表格
2. 现在转到Properties
。
3. 找到ControlBox
并将值更改为False
。
这将删除所有控制按钮(例如最小化、最大化、退出)以及位于标题前左角的图标。
您应该能够覆盖表单的 OnClose 事件。当应用程序在“关闭”时最小化到系统托盘时,这很常见。
当您按下窗体上的 X 框时。先完成,Form1_Closing
再Form1_Closed
完成。
在-e.Cancel = True
因此Form1_Closing
防止Form1_Closed
被调用,使您的表单仍然处于活动状态。
您可以将ControlBox
属性设置为False
,但整个标题栏将消失,但标题本身...
防止关闭表单,但将其隐藏:
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Me.WindowState = FormWindowState.Minimized
Me.Visible=false
e.Cancel = True
End Sub
选择(或单击)表单本身 单击属性窗口中的事件(小闪电图标)。查找Form.Closing
并双击它。然后输入:e.cancel=true
jmweb在这里所说的也可以。如果您在表单关闭时取消事件,X 关闭按钮将不会消失。但是这样做,您需要释放表单所需的进程,然后关闭表单。
Me.Dispose()
Me.Close()
这对我使用菜单条有用。
转到Form Properties
并将两者ControlBox
和设置ShowIcon
为假。
然后,清除表单属性中的所有文本。text
转到属性并从无聊的样式中选择无
只需选择所需的表单,然后在属性部分中,设置 controlBox = false 这对我有用:)
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Beep()
e.Cancel = True
End Sub