从标题栏.NET中可视地删除/禁用关闭按钮

时间:2009-11-16 16:58:02

标签: vb.net mdi titlebar

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

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

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

更多信息:

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

我需要维护原始标题栏,因为表单的绘图方法已经非常复杂了。

13 个答案:

答案 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)

在Visual Basic中制作没有标题栏的表单。

转到Form Properties并将ControlBoxShowIcon都设为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