2010-06-19 7 views
2

인터넷을 통해이 코드를 발견했지만 사용법이 확실하지 않습니다. 또한 작업이 완료된 후에 다시 활성화해야합니다. 도와주세요.윈도우에서 닫기 버튼을 비활성화하십시오.

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 

답변

3

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