Visivamente rimuovere / disabilitare il pulsante di chiusura dalla barra del titolo .NET
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.
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