Winforms 在windows窗体中禁用关闭按钮

Winforms 在windows窗体中禁用关闭按钮,winforms,Winforms,我在网上找到了这段代码,但不确定如何使用。我还需要在工作完成后重新启用它。请帮忙 Private Const CP_NOCLOSE_BUTTON As Integer = &H200 Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams Get Dim myCp As CreateParams = MyBase.CreateParams myC

我在网上找到了这段代码,但不确定如何使用。我还需要在工作完成后重新启用它。请帮忙

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

您可以将其粘贴到表单的代码中以使用它。但是,这将永久禁用关闭按钮。动态执行需要非常不同的代码,您必须修改系统菜单。将此代码粘贴到表单中,并在逻辑中使用CloseEnabled属性:

Public Property CloseEnabled() As Boolean
    Get
        Return mCloseEnabled
    End Get
    Set(ByVal value As Boolean)
        If value <> mCloseEnabled Then
            mCloseEnabled = value
            setSystemMenu()
        End If
    End Set
End Property
Private mCloseEnabled As Boolean = True

Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
    MyBase.OnHandleCreated(e)
    setSystemMenu()
End Sub

Private Sub setSystemMenu()
    Dim menu As IntPtr = GetSystemMenu(Me.Handle, False)
    Dim enable As Integer
    If Not mCloseEnabled Then enable = 1
    EnableMenuItem(menu, SC_CLOSE, enable)
End Sub

'' P/Invoke declarations
Private const SC_CLOSE As Integer = &hf060
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal revert As Boolean) As IntPtr
Private Declare Function EnableMenuItem Lib "user32.dll" (ByVal hMenu As IntPtr, ByVal IDEnableItem As Integer, ByVal wEnable As Integer) As Integer
公共属性CloseEnabled()为布尔值 得到 返回mCloseEnabled 结束 设置(ByVal值为布尔值) 如果值mCloseEnabled,则 mCloseEnabled=value 设置系统菜单() 如果结束 端集 端属性 Private mCloseEnabled为布尔值=True 已创建受保护的重写子OnHandleCreated(ByVal e As System.EventArgs) MyBase.OnHandleCreated(e) 设置系统菜单() 端接头 专用子集合系统菜单() Dim菜单为IntPtr=GetSystemMenu(Me.Handle,False) 将Dim启用为整数 如果未启用MCLOSE,则启用=1 启用项(菜单、SC\U关闭、启用) 端接头 “”P/Invoke声明 Private const SC_CLOSE As Integer=&hf060 将私有函数GetSystemMenu Lib“user32.dll”(ByVal hWnd作为IntPtr,ByVal revert作为Boolean)声明为IntPtr 私有声明函数EnableMenuItem库“user32.dll”(ByVal-humenu作为IntPtr,ByVal-IDEnableItem作为Integer,ByVal-wEnable作为Integer)作为Integer