Visually remove/disable close button from title ba

2019-01-26 08:27发布

问题:

I have been asked to remove or disable the close button from our VB .NET 2005 MDI application. There are no native properties on a form that allow you to grey out the close button so the user cannot close it, and I do not remember seeing anything in the form class that will allow me to do this.

Is there perhaps an API call or some magical property to set or function to call in .NET 2005 or later to do this?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

More information:

I need to maintain the minimize/maximize functionality

I need to maintain the original title bar because the form's drawing methods are already very complex.

回答1:

Based on the latest information you added to your question, skip to the end of my answer.


This is what you need to set to false: Form.ControlBox Property

BUT, you will lose the minimize and maximize buttons as well as the application menu (top left).

As an alternative, override OnClose and set Cancel to true (C# example):

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
    {
        e.Cancel = true;
    }

    base.OnFormClosing(e);
}

If neither of these solutions are acceptable, and you must disable just the close button, you can go the pinvoke/createparams route:

How to disable close button from window form using .NET application

This is the VB version of jdm's code:

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 


回答2:

You can disable the close button and the close menu item in the system menu by changing the "class style" of the window. Add the following code to your form:

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

This will not just stop the window from getting closed, but it will actually grey out the button. It is C# but I think it should be easy to translate it to VB.



回答3:

Here is a simple way to remove the close button:
1. Select the Form
2. Now go to Properties.
3. Find ControlBox and change the value to False.

This will remove all the Control Buttons (e.g. Minimize, Maximize, Exit) and also the icon also that is in the to left corner before the title.



回答4:

You should be able to override the OnClose event of the form. This is common when an application minimizes to the System Tray when "closed".



回答5:

When you press the X box on the form. The Form1_Closing is done first, then the Form1_Closed is done.

The e.Cancel = True in the Form1_Closing - prevents Form1_Closed from being called therefore, leaving your form still active.



回答6:

Prevent to close the form, but hide it:

Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Me.WindowState = FormWindowState.Minimized 
    Me.Visible=false
    e.Cancel = True
End Sub


回答7:

You can set the ControlBox property to False, but the whole title bar will be gone but the title itself...



回答8:

What jmweb said here is OK as well. The X close button won't go if you cancel the event on form closing. But doing so, you need to release the processes the form needs and then closing the form.

Me.Dispose()
Me.Close()

This worked for me using Menu Strip.



回答9:

Select (or click) the form itself Click on events in the property window (the little lightning bolt icon). Look for Form.Closing and double click it. Then type: e.cancel=true



回答10:

Making a Form without a Titlebar in Visual Basic.

Go to Form Properties and set both ControlBox and ShowIcon to false.

Then, clear all the text from the form's text property.



回答11:

go to properties and select from bored style as none



回答12:

Just select the required form and in the properties section, set controlBox = false That just worked for me :)



回答13:

Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Beep()
    e.Cancel = True
End Sub