我被要求从我们的VB .NET 2005 MDI应用程序中删除或禁用关闭按钮。表单上没有允许您使关闭按钮变灰的本地属性,因此用户无法关闭它,我不记得在表单类中看到任何允许我这样做的内容。
是否可能有一个API调用或一些神奇的属性来设置或运行.NET 2005或更高版本来执行此操作?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更多信息:
我需要维护最小化/最大化功能
我需要维护原始标题栏,因为表单的绘图方法已经非常复杂了。
答案 0 :(得分:27)
根据您在问题中添加的最新信息,请跳到我的答案结尾。
这是您需要设置为false的内容:Form.ControlBox Property
但是,您将丢失最小化和最大化按钮以及应用程序菜单(左上角)。
作为替代方法,重写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路径:
How to disable close button from window form using .NET application
这是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
答案 1 :(得分:10)
您可以通过更改窗口的“类样式”来禁用系统菜单中的关闭按钮和关闭菜单项。将以下代码添加到表单中:
const int CS_NOCLOSE = 0x200;
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
这不仅会阻止窗口关闭,而且实际上会使按钮灰显。它是C#,但我认为将其翻译成VB应该很容易。
答案 2 :(得分:6)
这是一种删除关闭按钮的简单方法:
1.选择表格
2.现在转到Properties
3.找到ControlBox
并将值更改为False
。
这将删除所有控制按钮(例如最小化,最大化,退出)以及标题前左下角的图标。
答案 3 :(得分:3)
您应该能够覆盖表单的OnClose事件。当应用程序在“关闭”时最小化到系统托盘时,这很常见。
答案 4 :(得分:2)
当您按下表单上的X框时。
首先完成Form1_Closing
,然后完成Form1_Closed
。
e.Cancel = True
中的Form1_Closing
会阻止Form1_Closed
被调用,从而使您的表单仍处于活动状态。
答案 5 :(得分:1)
您可以将ControlBox
属性设置为False
,但整个标题栏将会消失但标题本身...
答案 6 :(得分:1)
阻止关闭表单,但隐藏它:
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
答案 7 :(得分:0)
jmweb说here也没关系。如果您在表格关闭时取消活动,则X关闭按钮将不会启动。但这样做,您需要释放表单所需的进程,然后关闭表单。
Me.Dispose()
Me.Close()
这对我使用菜单条很有用。
答案 8 :(得分:0)
选择(或点击)表单本身
单击属性窗口中的事件(小闪电图标)。
查找Form.Closing
并双击它。
然后输入:e.cancel=true
答案 9 :(得分:0)
转到Form Properties
并将ControlBox
和ShowIcon
都设为false。
然后,从表单的text
属性中清除所有文本。
答案 10 :(得分:-1)
转到属性并从无聊的样式中选择为无
答案 11 :(得分:-2)
只需选择所需的表单,然后在属性部分中设置controlBox = false 这对我有用:)
答案 12 :(得分:-3)
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Beep()
e.Cancel = True
End Sub