Comment masquer uniquement le bouton Fermer (x)?

151

J'ai une boîte de dialogue modale et je dois masquer le bouton Fermer (X), mais je ne peux pas l'utiliser ControlBox = false, car je dois conserver les boutons Réduire et Agrandir.

J'ai besoin de masquer juste le bouton Fermer, y a-t-il un moyen de le faire?

Merci beaucoup!

Mise à jour: j'avais la permission de le désactiver, ce qui est plus simple :) Merci à tous!

stefano m
la source
Serait-ce ce que vous voulez: [Hide Close Button [X] of Win Forms in C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/… ) vient de googler:,hide close button c# deuxième résultat ici! =)
Miguel Angelo
vous vous trompez, je ne veux pas désactiver le bouton, mais le CACHER .. êtes-vous capable de trouver une solution?
stefano m
8
Le besoin est un mot fort. D'où vient cette exigence? Quelle est l'exigence réelle - que l'utilisateur ne puisse pas terminer le programme ou que l'interface utilisateur "semble ne pas avoir de bouton de fermeture"? Parce qu'il y a d'autres façons de contourner cela, et vous allez avoir du mal à les fermer complètement (par exemple, gestionnaire de tâches, taskkill, éventuellement alt + f4, etc.). Personnellement, je ne travaillerais pas trop dur pour cela, car à moins que vous ne remodeliez toute votre application de toute façon, ce sera un effort inutile et brisera les attentes / la continuité des utilisateurs avec d'autres programmes Windows.
Merlyn Morgan-Graham le
4
@Sayem révèle cette page, alors ne soyez pas un critique.
Brian Graham le
1
Grattez également le bouton de réduction de votre liste. Réduire au minimum une boîte de dialogue modale la fermera automatiquement. Forcément, c'est la seule fenêtre qui reste encore activée. Lorsque vous le réduisez, il n'y aurait plus de fenêtre qui puisse encore obtenir le focus afin que l'utilisateur ne puisse pas revenir à votre programme. Vous êtes maintenant dans "Est-ce que cela a encore du sens?" territoire. Ce n'est pas le cas.
Hans Passant le

Réponses:

148

Vous ne pouvez pas le masquer, mais vous pouvez le désactiver en remplaçant la propriété CreateParams du formulaire.

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;
    }
}

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

Daniel A. White
la source
merci, j'ai trouvé cette solution, mais nous aimerions la cacher, pas seulement désactiver :( anywat merci!
stefano m
4
il n'y a pas d'autre moyen que de concevoir votre formulaire à partir de zéro.
Daniel A. White le
Ouais. mieux faire votre propre formulaire avec votre propre boîte de contrôle sans le bouton de fermeture puis masquer la boîte de contrôle du formulaire parent.
Bahamut
La réponse de «Abhishek.Chopra» est simple et efficace.
Altaf Patel
Comment le réactiver pendant l'exécution?
Mike de Klerk
158

Nous pouvons masquer le bouton de fermeture sur le formulaire en définissant this.ControlBox=false;

Abhishek Chopra
la source
29
Avez-vous lu la question où il a précisé que ce n'était pas une option?
Servy
28
J'ai fait une recherche sur Google et ce SO QA a été le premier succès. Et cette réponse était ce que je cherchais. Merci Abhishek ...
Abel Gaxiola
15
Cela cache tous ces boutons de dimensionnement. Pas seulement le X.
Rich Shealer
1
Merci beaucoup! Le moyen le plus simple.
26

Eh bien, vous pouvez le cacher en supprimant tout le menu système:

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

Bien sûr, cela supprime les boutons de réduction et de maximisation.

Si vous conservez le menu système mais supprimez l'élément de fermeture, le bouton de fermeture reste mais est désactivé.

La dernière alternative est de peindre vous-même la zone non cliente. C'est assez difficile à faire.

David Heffernan
la source
4
Cela fonctionne aussi, super! Mais ControlBox = false est facile à utiliser comme votre chemin.
simmeone le
1
C'est la même chose que le réglage ControlBoxsur false. En outre, cela échoue à l'exigence: je dois conserver les boutons Réduire et Agrandir
whiteshooz
23

vous pouvez masquer la zone de fermeture en utilisant

this.ControlBox = false;

et n'oubliez pas d'ajouter un espace blanc this.Text = " "pour faire comme ça

entrez la description de l'image ici

Ramgy Borja
la source
2
C'est de quoi j'ai besoin. Merci.
Kosmas du
2
Ce n'est pas correct. Directement à partir de la question d'OP: je ne peux pas utiliserControlBox = false
Martin
8

Si vous voulez vraiment le cacher, comme dans "non visible", vous devrez probablement créer un formulaire sans bordure et dessiner vous-même les composants de légende. La bibliothèque VisualStyles a les éléments Windows disponibles. Vous devrez également ajouter à nouveau la fonctionnalité de redimensionnement du formulaire ou de déplacement du formulaire en saisissant la barre de légende. Sans parler du menu système dans le coin.

Dans la plupart des cas, il est difficile de justifier que le bouton "Fermer" ne soit pas disponible, en particulier lorsque vous voulez un formulaire modal avec des capacités de réduction. Minimiser un formulaire modal n'a vraiment aucun sens.

LarsTech
la source
2

Dans les propriétés de votre formulaire, définissez 'Control Box' = False, mais cela masquera également Minimized et Maximize.

Muhammad Haroon
la source
1

Eh bien, vous pouvez masquer le bouton de fermeture en modifiant le FormBorderStyle de la section des propriétés ou par programme dans le constructeur en utilisant:

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

puis vous créez un élément de bande de menu pour quitter l'application.

à votre santé

Josh John
la source