175 votes

Comment masquer uniquement le bouton Fermer (x) ?

J'ai une boîte de dialogue modale et j'ai besoin de masquer le bouton Fermer (X), mais je ne peux pas utiliser la fonction ControlBox = false car je dois conserver les boutons Minimiser et Maximiser.

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

Merci beaucoup !

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

0 votes

Est-ce que cela pourrait être ce que vous voulez : [Masquer le bouton de fermeture [X] des formulaires Win en C#.NET]( sameeramrutia.wordpress.com/2008/09/16/ ) vient de googler : hide close button c# , deuxième résultat ici ! =)

0 votes

Vous avez tort, je ne veux pas désactiver le bouton, mais le CACHER pouvez-vous trouver une solution ?

8 votes

Besoin est un mot fort. D'où vient cette exigence ? Quelle est l'exigence réelle - que l'utilisateur ne puisse pas mettre fin au programme, ou que l'interface utilisateur "semble ne pas avoir de bouton de fermeture" ? Parce qu'il y a d'autres moyens de contourner cette exigence, et vous aurez du mal à les fermer tous complètement (par exemple, le gestionnaire de tâches, taskkill, éventuellement alt+f4, etc). Personnellement, je ne me donnerais pas trop de mal pour cela, parce qu'à moins que vous ne modifiiez l'ensemble de votre application de toute façon, ce sera un effort inutile, et cela brisera les attentes des utilisateurs et la continuité avec les autres programmes Windows.

185voto

Abhishek.Chopra Points 281

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

Notez que cela masque tous les boutons de dimensionnement. Pas seulement le X. Dans certains cas, cela peut être suffisant.

44 votes

Avez-vous lu la question où il précise que ce n'est pas une option ?

31 votes

J'ai fait une recherche sur Google et ce SO QA est arrivé en tête. Et cette réponse correspondait à ce que je cherchais. Merci Abhishek...

1 votes

Merci beaucoup ! Le moyen le plus facile.

165voto

Daniel A. White Points 91889

Vous ne pouvez pas le cacher, 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

0 votes

Merci, j'ai trouvé cette solution, mais nous voudrions le cacher, pas seulement le désactiver :( en tout cas, merci !

4 votes

Il n'y a pas d'autre solution que de concevoir votre formulaire à partir de zéro.

0 votes

Oui, il vaut mieux créer son propre formulaire avec sa propre boîte de contrôle sans le bouton de fermeture, puis cacher la boîte de contrôle du formulaire parent.

28voto

David Heffernan Points 292687

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 d'agrandissement.

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 solution consiste à peindre vous-même la zone non cliente. C'est assez difficile à réussir.

6 votes

Cela fonctionne aussi, super ! Mais ControlBox = false est facile à utiliser comme moyen.

2 votes

C'est la même chose que de définir ControlBox à faux. Aussi, il échoue à l'exigence : Je dois conserver les boutons Minimiser et Maximiser.

9voto

LarsTech Points 43510

Si vous voulez vraiment le cacher, c'est-à-dire le rendre "non visible", vous devrez probablement créer un formulaire sans bordure et dessiner vous-même les composants de la légende. La bibliothèque VisualStyles dispose des éléments Windows. Vous devrez également réintégrer la fonctionnalité permettant de redimensionner le formulaire ou de le déplacer en saisissant la barre de légende. Sans oublier le menu système dans le coin.

Dans la plupart des cas, il est difficile de justifier l'absence du bouton "fermer", en particulier lorsque vous voulez un formulaire modal avec des capacités de réduction. Minimiser un formulaire modal n'a vraiment aucun sens.

-3voto

Sujith H S Points 169

Vous pouvez le cacher en utilisant this.ControlBox=false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X