Member Avatar for Rahul47

Hey people, here is a question that is troubling me from quite a long time.

I want to diable the (x) button on form_load event, to prevent user from directly closing the application.

How may I achieve this ?

Recommended Answers

All 10 Replies

Go to FormClosing event of the form and add e.Cancel=True.

Member Avatar for Rahul47

@Fame95: I Am aware of this. But I Want user to see (x) button disabled when form is loaded.

Member Avatar for Rahul47

@Fame95: That Was of No Help.
Appreciate your effort though.

Private Const CP_NOCLOSE_BUTTON As Integer = &H200
    Protected 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

That should work, put into the Form's code you wish to disable under:

Public Class Form

Credit goes to @Fame95 His answer was correct.

you may remove that button on the form's property window, find ControlBox and set to False.

If you want to insist on doing it in run time use Me.ControlBox = False or for C# this.ControlBox = false;

@tinstaafl Im assuming he wants to keep Minimize and Maximize, thats what my code does.

Be advised that setting the class style to CS_NOCLOSE (named CP_NOCLOSE_BUTTON in Doogledude's example) will also prevent Alt-F4 from closing the window. You can achieve the same effect while retaining Alt-F4 closure by PInvoking the RemoveMenu function.

   Private Const MF_BYCOMMAND As Integer = 0

   <DllImport("User32")> _
   Private Shared Function RemoveMenu(ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
   End Function

   <DllImport("User32")> _
   Private Shared Function GetSystemMenu(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
   End Function

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim hMenu As IntPtr = GetSystemMenu(Me.Handle, False)
      RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
   End Sub
Member Avatar for Rahul47

To All

Thanks for contributing to this discussion. I learned a lot from you people.
The smart answer i will go with Me.ControlBox = False. Because it uses inbuilt function and saved my time.
Despite the fact that it does not provide maximize and minimize button, it can be minimized from startbar. And Its Cool

Special Thanks to tinstaafl.
And Kudos to all.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.