Come nascondere solo il pulsante Chiudi (x)?


151

Ho una finestra di dialogo modale e devo nascondere il pulsante Chiudi (X), ma non posso utilizzarlo ControlBox = false, perché devo mantenere i pulsanti Riduci a icona e Ingrandisci.

Devo nascondere il pulsante Chiudi, c'è un modo per farlo?

Molte grazie!

Aggiornamento: ho avuto il permesso di disabilitarlo, il che è più semplice :) Grazie a tutti!


Potrebbe essere questo quello che vuoi: [Nascondi pulsante Chiudi [X] di Win Forms in C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/… ) appena cercato su Google:,hide close button c# secondo risultato qui! =)
Miguel Angelo,

ti sbagli, non voglio disabilitare il pulsante, ma NASCONDI .. riesci a trovare una soluzione?
stefano m,

8
Bisogno è una parola forte. Da dove viene questo requisito? Qual è il requisito effettivo: l'utente non può terminare il programma o che l'interfaccia utente "sembra che non abbia un pulsante di chiusura"? Perché ci sono altri modi per aggirare questo, e ti sarà difficile premere per chiuderli completamente (ad es. Task manager, taskkill, possibilmente alt + f4, ecc.). Personalmente non lavorerei troppo duramente a questo, perché a meno che non si ridisegni la tua intera app comunque, sarà uno sforzo sprecato e spezzerà le aspettative / la continuità degli utenti con altri programmi di Windows.
Merlyn Morgan-Graham,

4
@Sayem rivela questa pagina, quindi non essere così critico.
Brian Graham,

1
Elimina anche il pulsante Riduci dall'elenco. Ridurre a icona una finestra di dialogo modale la chiuderà automaticamente. Necessariamente così, è l'unica finestra rimasta che è ancora abilitata. Quando lo minimizzi, non rimarrebbe alcuna finestra che possa ancora ottenere lo stato attivo in modo che l'utente non possa tornare al tuo programma. Ora sei in "ha ancora senso?" territorio. Non
Hans Passant,

Risposte:


148

Non puoi nasconderlo, ma puoi disabilitarlo sovrascrivendo la proprietà CreateParams del modulo.

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

Fonte: http://www.codeproject.com/KB/cs/DisableClose.aspx


grazie, ho trovato questa soluzione, ma vorremmo nasconderla, non solo disabilitare :( grazie comunque!
stefano m

4
non c'è altro modo che progettare il tuo modulo da zero.
Daniel A. White,

si. meglio creare il proprio modulo con la propria casella di controllo senza il pulsante Chiudi quindi nascondere la casella di controllo del modulo principale.
Bahamut,

La risposta di "Abhishek.Chopra" è semplice ed efficace.
Altaf Patel,

Come abilitarlo di nuovo durante il runtime?
Mike de Klerk,

158

Possiamo nascondere il pulsante di chiusura sul modulo impostando this.ControlBox=false;


29
Hai letto la domanda in cui ha specificato che non era un'opzione?
Serve il

28
Ha fatto una ricerca su Google e questo SO QA è stato il massimo successo. E questa risposta era quello che stavo cercando. Grazie Abhishek ...
Abel Gaxiola

15
Ciò nasconde tutti quei pulsanti di dimensionamento. Non solo la X.
Rich Shealer,

1
Grazie mille! Il modo più semplice

26

Bene, puoi nasconderlo, rimuovendo l'intero menu di sistema:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

Naturalmente, così facendo si rimuovono i pulsanti minimizza e massimizza.

Se si mantiene il menu di sistema ma si rimuove l'elemento di chiusura, il pulsante di chiusura rimane ma è disabilitato.

L'alternativa finale è dipingere da soli l'area non cliente. È abbastanza difficile da ottenere.


4
Anche questo funziona benissimo! Ma ControlBox = false è facile da usare come preferisci.
simmeone

1
È uguale all'impostazione ControlBoxsu falso. Inoltre, non soddisfa il requisito: devo mantenere i pulsanti Riduci a icona e Ingrandisci
whiteshooz,

23

puoi nascondere la casella di chiusura utilizzando

this.ControlBox = false;

e non dimenticare di aggiungere uno spazio bianco this.Text = " "per renderlo così

inserisci qui la descrizione dell'immagine


2
Questo è quello di cui ho bisogno. Grazie.
Kosmas,

2
Questo non è corretto Direttamente dalla domanda di OP: Non posso usareControlBox = false
Martin

8

Se vuoi davvero nasconderlo, come in "non visibile", probabilmente dovrai creare una forma senza bordi e disegnare tu stesso i componenti della didascalia. La libreria di VisualStyles ha gli elementi di Windows disponibili. Dovresti anche aggiungere nuovamente la funzionalità di ridimensionamento del modulo o spostare il modulo afferrando la barra dei sottotitoli. Per non parlare del menu di sistema nell'angolo.

Nella maggior parte dei casi, è difficile giustificare la mancata disponibilità del pulsante "Chiudi", soprattutto quando si desidera un modulo modale con funzionalità di minimizzazione. Ridurre al minimo una forma modale non ha davvero senso.


2

Nelle proprietà del modulo impostare 'Control Box' = False ma nasconderà anche Riduci a icona e Ingrandisci.


1

Bene, puoi nascondere il pulsante di chiusura modificando FormBorderStyle dalla sezione delle proprietà o programmaticamente nel costruttore usando:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

quindi si crea una voce di menu per uscire dall'applicazione.

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.