2010-06-19 8 views
2

J'ai trouvé ce code sur Internet mais je ne sais pas comment l'utiliser. De plus, je dois le réactiver une fois le travail terminé. Aidez-moi, s'il vous plaît.Désactiver le bouton de fermeture dans le formulaire Windows

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 

Répondre

3

Vous collez ceci dans le code de votre formulaire pour l'utiliser. Cependant, cela désactive définitivement le bouton de fermeture. Le faire de façon dynamique nécessite un code très différent, vous devez modifier le menu du système. Collez ce code dans votre formulaire et utilisez la propriété CloseEnabled dans votre logique:

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 
Questions connexes