Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How to remove or disable Close (X)-button of the Form?

6 views
Skip to first unread message

Mika M

unread,
Jan 31, 2005, 4:17:30 AM1/31/05
to
Customer wants the Close (X)-button of the forms top right corner to be
Disabled or removed from Windows Form-application, which is made using
VB.NET, but leave MinimizeBox and MaximizeBox.

I think this is not so clever to do like this way, but have to do like
customer wants - so how to do this? It seems to be not just like
changing property like with MinimizeBox and MaximizeBox. Any succestions?

--
Thanks in advance!

Mika

Cor Ligthert

unread,
Jan 31, 2005, 5:09:23 AM1/31/05
to
Mika,

When you are sure your users wants it and you are not distributing the
program too others, (because otherwise you will most probably directly be
confrontated with bug reports which are probably justifiable correct) you
can just use the closing event and set in that e.cancel = true (or false I
always am in doubt about the last just try).

I would in your situation let the user sign a contract that he wanted this.
What you can do as well is showing in a the messagebox from the clossing
event that this is by order from your client disabled. (A little more polite
however not to misunderstand text than of course).

Instead of that all you can as well overpaint the X (and keep the cancel)
however that will be a lot more work.

I hope this helps?

Cor


mark

unread,
Jan 31, 2005, 6:09:02 AM1/31/05
to
#Region " Windows Form Designer generated code "

'disables close
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
Const CS_NOCLOSE As Integer = &H200
cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
Return cp
End Get
End Property

Cor Ligthert

unread,
Jan 31, 2005, 6:17:44 AM1/31/05
to
Mark,

Nice, I never saw this one before (is now in my snippets)

Thanks

Cor


Herfried K. Wagner [MVP]

unread,
Jan 31, 2005, 6:42:47 AM1/31/05
to
"Mika M" <mahmik_nospam@removethis_luukku.com> schrieb:

> Customer wants the Close (X)-button of the forms top right corner to be
> Disabled or removed from Windows Form-application, which is made using
> VB.NET, but leave MinimizeBox and MaximizeBox.

Add this to your form:

\\\


Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams

Const CS_DBLCLKS As Int32 = &H8
Const CS_NOCLOSE As Int32 = &H200
cp.ClassStyle = CS_DBLCLKS Or CS_NOCLOSE


Return cp
End Get
End Property

///

Alternatively you can remove the according menu items from the system
menu using p/invoke.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Mika M

unread,
Jan 31, 2005, 6:45:46 AM1/31/05
to
> #Region " Windows Form Designer generated code "
>
> 'disables close
> Protected Overrides ReadOnly Property CreateParams() As CreateParams
> Get
> Dim cp As CreateParams = MyBase.CreateParams
> Const CS_NOCLOSE As Integer = &H200
> cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
> Return cp
> End Get
> End Property
>
>

Thanks Mark! Seems to work like I need!

--
Mika

Mick Doherty

unread,
Jan 31, 2005, 11:19:11 AM1/31/05
to
...and I thought you were always paying attention ;)

--
Mick Doherty
http://dotnetrix.co.uk/nothing.html


"Cor Ligthert" <notmyfi...@planet.nl> wrote in message
news:OJG5WZ4B...@TK2MSFTNGP09.phx.gbl...

Mick Doherty

unread,
Jan 31, 2005, 11:17:07 AM1/31/05
to
I had quite a discussion about this in GotDotNet a few months back:
http://www.gotdotnet.com/Community/MessageBoard/Thread.aspx?id=248554&Page=1#248801

If you never want the Close Button to show then use the CreateParams method,
but if you want to toggle the state of the close button then this method is
no good, you will instead have to modify the Window Menu.


"Cor Ligthert" <notmyfi...@planet.nl> wrote in message

news:%23cm2Kz3...@tk2msftngp13.phx.gbl...

Cor Ligthert

unread,
Jan 31, 2005, 11:25:02 AM1/31/05
to
Mick,

When I saw your article I thought I have to say Sorry Sorry Sorry however
you gave me the change here.

Until now I thought that I had seen only awfull painting solutions, because
this simple one I would have remembered me I thought.

Again Sorry Sorry Sorry

:-)))

Cor


Mick Doherty

unread,
Jan 31, 2005, 11:50:38 AM1/31/05
to
No need to apologise. I just couldn't believe you hadn't seen it before
since it's been here several times in the past and I'm almost positive that
you've read every message since you started interacting with the group. By
the amount of responses you give it certainly looks that way.


"Cor Ligthert" <notmyfi...@planet.nl> wrote in message

news:unSqFF7B...@TK2MSFTNGP10.phx.gbl...

Crouchie1998

unread,
Jan 31, 2005, 1:17:45 PM1/31/05
to
Declarations:

Private Declare Function GetSystemMenu Lib "user32" Alias
"GetSystemMenu" (ByVal hwnd As Integer, ByVal bRevert As Integer) As Integer
Private Declare Function DeleteMenu Lib "user32" Alias "DeleteMenu"
(ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer)
As Integer

Private Const MF_BYPOSITION As Integer = &H400&


Put this in form load:

DeleteMenu(iMenu, 6, MF_BYPOSITION) ' Disable the 'X' (Control Box)
DeleteMenu(iMenu, 5, MF_BYPOSITION) ' Remove the seperator bar

The above will disable your ControlBox for you

Herfried K. Wagner [MVP]

unread,
Jan 31, 2005, 1:34:30 PM1/31/05
to
"Crouchie1998" <Crouch...@discussions.microsoft.com> schrieb:

> Private Declare Function GetSystemMenu Lib "user32" Alias
> "GetSystemMenu" (ByVal hwnd As Integer, ByVal bRevert As Integer) As
> Integer
> Private Declare Function DeleteMenu Lib "user32" Alias "DeleteMenu"
> (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As
> Integer)
> As Integer
>
> Private Const MF_BYPOSITION As Integer = &H400&
>
>
> Put this in form load:
>
> DeleteMenu(iMenu, 6, MF_BYPOSITION) ' Disable the 'X' (Control Box)
> DeleteMenu(iMenu, 5, MF_BYPOSITION) ' Remove the seperator bar
>
> The above will disable your ControlBox for you

ACK. I have published a similar solution on my website some time ago
(<URL:http://dotnet.mvps.org/dotnet/code/windowsandforms/#NoClose>), but I
prefer the 'CreateParams' solution.

Crouchie1998

unread,
Jan 31, 2005, 2:03:02 PM1/31/05
to
I first used the above solution in VB 6, but 2 years ago when I moved to
VB.NET I charged the code accordingly.

"Herfried K. Wagner [MVP]" wrote:

0 new messages