Disabling/Enabling close button on a form

  • Thread starter Thread starter Marco Castro
  • Start date Start date
Hi Marco,

If you mean the default close X than you can set the controlbox from the
form to false,
you disable than also the posibility to minimize and maximize.
I did not see something as minimize = false if you are looking for that.

I hope this helps?

Cor
...
 
* "Cor said:
If you mean the default close X than you can set the controlbox from the
form to false,
you disable than also the posibility to minimize and maximize.
I did not see something as minimize = false if you are looking for that.

It's even possible to /disable/ the button, but I don't know how to
enable it:

\\\
Private Declare Function GetSystemMenu Lib "user32.dll" ( _
ByVal hWnd As IntPtr, _
ByVal bRevert As Int32 _
) As IntPtr

Private Declare Function GetMenuItemCount Lib "user32.dll" ( _
ByVal hMenu As IntPtr _
) As Int32

Private Declare Function DrawMenuBar Lib "user32.dll" ( _
ByVal hWnd As IntPtr _
) As Int32

Private Declare Function RemoveMenu Lib "user32.dll" ( _
ByVal hMenu As IntPtr, _
ByVal nPosition As Int32, _
ByVal wFlags As Int32 _
) As Int32

Private Const MF_BYPOSITION As Int32 = &H400
Private Const MF_REMOVE As Int32 = &H1000

Private Sub RemoveCloseButton(ByVal frmForm As Form)
Dim hMenu As IntPtr, n As Int32
hMenu = GetSystemMenu(frmForm.Handle, 0)
If Not hMenu.Equals(IntPtr.Zero) Then
n = GetMenuItemCount(hMenu)
If n > 0 Then
RemoveMenu(hMenu, n - 1, MF_BYPOSITION Or MF_REMOVE)
RemoveMenu(hMenu, n - 2, MF_BYPOSITION Or MF_REMOVE)
DrawMenuBar(frmForm.Handle)
End If
End If
End Sub
///
 
Below is some code I found in a different thread. Doesn't disable the
close-x, but simulates the VB6 queryunload unloadmode parameter.

Gary,

The code below effectively disables a form's close button.

HTH.

Danny L. Joe

----------------------------------
Private CloseButtonClicked As Boolean = False

Private Sub MyForm_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If Me.CloseButtonClicked = True Then
Me.CloseButtonClicked = False 'reset close button detector
e.Cancel = True
Return
End If
End Sub

Protected Overrides Sub WndProc(ByRef m As
System.Windows.Forms.Message)
If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32 = SC_CLOSE Then
Me.CloseButtonClicked = True
End If
MyBase.WndProc(m)
End Sub
 
Back
Top