Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从标题栏.NET中直观地删除/禁用关闭按钮_Vb.net_Mdi_Titlebar - Fatal编程技术网

Vb.net 从标题栏.NET中直观地删除/禁用关闭按钮

Vb.net 从标题栏.NET中直观地删除/禁用关闭按钮,vb.net,mdi,titlebar,Vb.net,Mdi,Titlebar,我被要求从VB.NET2005MDI应用程序中删除或禁用关闭按钮。表单上没有允许您灰显关闭按钮的本机属性,因此用户无法关闭它,我不记得在form类中看到任何允许我这样做的内容 在.NET2005或更高版本中是否有可能需要设置API调用或某些神奇的属性或调用函数来实现这一点 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 更多信息: 我需要维护最小化/最大化功能 我需要维护原始标题栏,因为表单的绘图方法已经非常复杂。您应该能够覆盖表单的OnClose事件。当应用程序关闭时最小化到系统托盘

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

在.NET2005或更高版本中是否有可能需要设置API调用或某些神奇的属性或调用函数来实现这一点

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

更多信息:

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


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

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

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

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

这就是您需要设置为false的内容:

但是,您将丢失最小化和最大化按钮以及左上角的应用程序菜单

或者,重写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。

当你按下表单上的X框时。
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Beep()
    e.Cancel = True
End Sub
首先完成Form1\u关闭,然后完成Form1\u关闭


Form1\u Closing中的e.Cancel=True-防止调用Form1\u Closing,从而使表单保持活动状态。

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


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

只需选择所需的表单,然后在属性部分,将controlBox设置为false 这对我来说很有效:

jmweb所说的也可以。如果取消表单关闭时的事件,X close按钮将不起作用。但这样做,您需要释放表单所需的流程,然后关闭表单

Me.Dispose()
Me.Close()

这对我使用菜单条很有效。

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

阻止关闭表单,但隐藏它:

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
在Visual Basic中创建没有标题栏的窗体。 转到表单属性并将ControlBox和ShowIcon都设置为false


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

转到属性并从样式中选择,因为没有。

我也想到了这一点。遗憾的是,我忘了指定,但我需要最小化/最大化功能。我可以通过编程来完成这些,但我需要添加我自己的工具栏,上面有最小化和最大化按钮。我在答案的底部添加了。标题仍然保留,只是删除了另一个控制按钮。这并没有回答他的问题,因为他说他需要最小/最大功能。不过,这解决了我的需要,谢谢!Private Const CS_NOCLOSE As Integer=&H200受保护重写只读属性CreateParams As CreateParams Get Dim cp As CreateParams=MyBase.CreateParams cp.ClassStyle=cp.ClassStyle或CS_NOCLOSE返回cp End Get End属性