이것을 사용하려면 양식의 코드에 붙여 넣으십시오. 그러나 이것은 닫기 버튼을 영구적으로 비활성화합니다. 동적으로 처리하려면 매우 다른 코드가 필요합니다. 시스템 메뉴를 수정해야합니다. 이 코드를 양식에 붙여넣고 로직에서 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