10

我被要求从我们的 VB .NET 2005 MDI 应用程序中删除或禁用关闭按钮。表单上没有允许您将关闭按钮变灰的本地属性,因此用户无法关闭它,而且我不记得在表单类中看到任何允许我执行此操作的内容。

在 .NET 2005 或更高版本中是否有要设置或调用的 API 调用或一些神奇的属性来执行此操作?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

更多信息:

我需要维护最小化/最大化功能

我需要保持原来的标题栏,因为表单的绘制方法已经很复杂了。

4

13 回答 13

30

根据您添加到问题中的最新信息,请跳到我的回答末尾。


这是您需要设置为 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 路线:

如何使用 .NET 应用程序从窗口窗体中禁用关闭按钮

这是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 
于 2009-11-16T17:06:59.137 回答
10

您可以通过更改窗口的“类样式”来禁用系统菜单中的关闭按钮和关闭菜单项。将以下代码添加到您的表单中:

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

这不仅会阻止窗口关闭,而且实际上会使按钮变灰。它是 C#,但我认为将其转换为 VB 应该很容易。

于 2009-11-16T17:19:20.450 回答
9

这是删除关闭按钮的简单方法:
1. 选择表格
2. 现在转到Properties
3. 找到ControlBox并将值更改为False

这将删除所有控制按钮(例如最小化、最大化、退出)以及位于标题前左角的图标。

于 2013-10-05T16:00:08.157 回答
3

您应该能够覆盖表单的 OnClose 事件。当应用程序在“关闭”时最小化到系统托盘时,这很常见。

于 2009-11-16T17:01:42.763 回答
2

当您按下窗体上的 X 框时。先完成,Form1_ClosingForm1_Closed完成。

在-e.Cancel = True因此Form1_Closing防止Form1_Closed被调用,使您的表单仍然处于活动状态。

于 2012-10-24T19:05:27.567 回答
1

您可以将ControlBox属性设置为False,但整个标题栏将消失,但标题本身...

于 2009-11-16T17:04:25.413 回答
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
于 2015-05-04T15:36:46.683 回答
0

选择(或单击)表单本身 单击属性窗口中的事件(小闪电图标)。查找Form.Closing并双击它。然后输入:e.cancel=true

于 2015-02-15T12:07:53.077 回答
0

jmweb在这里所说的也可以。如果您在表单关闭时取消事件,X 关闭按钮将不会消失。但是这样做,您需要释放表单所需的进程,然后关闭表单。

Me.Dispose()
Me.Close()

这对我使用菜单条有用。

于 2014-07-09T23:39:39.077 回答
0

在 Visual Basic 中制作没有标题栏的窗体。

转到Form Properties并将两者ControlBox和设置ShowIcon为假。

然后,清除表单属性中的所有文本。text

于 2015-05-14T11:45:54.140 回答
-1

转到属性并从无聊的样式中选择无

于 2017-07-17T11:09:55.537 回答
-2

只需选择所需的表单,然后在属性部分中,设置 controlBox = false 这对我有用:)

于 2014-05-18T18:42:30.360 回答
-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
于 2012-10-24T17:56:49.773 回答