Visivamente rimuovere / disabilitare il pulsante di chiusura dalla barra del titolo .NET

StackOverflow https://stackoverflow.com/questions/1743433

  •  20-09-2019
  •  | 
  •  

Domanda

Mi è stato chiesto di rimuovere o disabilitare il pulsante di chiusura dalla nostra applicazione MDI VB .NET 2005. Non ci sono immobili native su un modulo che permettono di grigio il pulsante di chiusura in modo che l'utente non può essere chiuso, e non mi ricordo di aver visto nulla nella classe del form che mi permetterà di fare questo.

C'è forse una chiamata API o qualche proprietà magica per impostare o la funzione da chiamare in .NET 2005 o più tardi per fare questo?

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

Più informazioni:

ho bisogno di mantenere la funzionalità di minimizzare / massimizzare

ho bisogno di mantenere la barra del titolo originale, perché i metodi di disegno del modulo sono già molto complesso.

È stato utile?

Soluzione

In base alle ultime informazioni si è aggiunto alla tua domanda, saltare alla fine della mia risposta.


Questo è ciò che è necessario impostare su false: Form.ControlBox proprietà

MA, si perderanno i pulsanti minimizzare e massimizzare così come il menu dell'applicazione (in alto a sinistra).

In alternativa, ignorare OnClose e impostare Cancel su true (C # esempio):

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

    base.OnFormClosing(e);
}

Se nessuna di queste soluzioni sono accettabili, ed è necessario disattivare solo il pulsante di chiusura, si può andare il percorso PInvoke / CreateParams:

Come disattivare il pulsante di chiusura dalla forma della finestra utilizzando l'applicazione .NET

Questa è la versione VB del codice di JDM:

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 

Altri suggerimenti

È possibile disattivare il pulsante di chiusura e la voce di menu Chiudi nel menu di sistema modificando il "stile di classe" della finestra. Aggiungere il seguente codice al form:

const int CS_NOCLOSE = 0x200;

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

Questo non solo fermare la finestra dall'ottenere chiusa, ma sarà effettivamente in grigio il pulsante. Si tratta di C #, ma penso che dovrebbe essere facile da tradurre al VB.

Ecco un modo semplice per rimuovere il pulsante di chiusura:
 1. Selezionare il modulo
 2. Ora andate Properties.
 3. Trova ControlBox e modificare il valore di False.

Questo eliminerà tutti i pulsanti di controllo (es. Ridurre, ingrandire, Exit) e anche l'icona, inoltre, che è in a sinistra prima del titolo.

Si dovrebbe essere in grado di ignorare l'evento chiusura della maschera. Questo è comune quando un'applicazione minimizza al vassoio del sistema quando "chiuso".

Quando si preme la casella X sul modulo. Il Form1_Closing è fatta per prima, poi il Form1_Closed è fatto.

Il e.Cancel = True nel Form1_Closing -. Impedisce Form1_Closed da essere chiamato di conseguenza, lasciando la forma ancora attivo

Prevenire per chiudere la forma, ma lo nasconde:

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

È possibile impostare la proprietà ControlBox a False, ma tutta la barra del titolo sarà andato, ma il titolo stesso ...

Cosa jmweb detto qui va bene pure. Il pulsante di chiusura X non andrà se si annulla l'evento in chiusura modulo. Ma così facendo, è necessario rilasciare i processi alle esigenze di forma e quindi chiudere il modulo.

Me.Dispose()
Me.Close()

Questo ha funzionato per me usando Striscia Menu.

Seleziona (o fare clic) la forma stessa Clicca su eventi nella finestra delle proprietà (la piccola icona fulmine). Cercare Form.Closing e fare doppio clic. Poi Tipo: e.cancel=true

facendo una forma senza una barra del titolo in Visual Basic.

Vai Form Properties e impostare sia ControlBox e ShowIcon false.

Poi, chiaro tutti il testo dalla proprietà text del form.

andare alle proprietà e scegliere tra lo stile annoiato come nessuno

È sufficiente selezionare la forma desiderata e nella sezione Proprietà, impostare ControlBox = false Che appena ha lavorato per me:)

Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Beep()
    e.Cancel = True
End Sub
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top