2011-09-04 2 views
98

J'ai un dialogue modal, et j'ai besoin de cacher le bouton Fermer (X), mais je ne peux pas utiliser ControlBox = false, parce que je dois garder les boutons Réduire et Agrandir.Windows Forms: Comment masquer le bouton Fermer (x)?

Je dois masquer juste le bouton Fermer, est-il possible de le faire?

Merci beaucoup!

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

+0

vous avez tort, je ne veux pas le bouton désactiver, mais HIDE Est-ce que ... tu es capable de trouver une solution? –

+8

Le besoin est un mot fort. D'où vient cette exigence?Quelle est l'exigence réelle - que l'utilisateur ne peut pas terminer le programme, ou que l'interface utilisateur "semble ne pas avoir un 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 à ce sujet, car à moins que vous ne réappliquiez votre application entière de toute façon, ce serait gaspillage d'efforts, et rompre les attentes des utilisateurs/continuité avec d'autres programmes Windows. –

+4

@Sayem il révèle cette page, alors ne soyez pas un tel critique. –

Répondre

110

Vous ne pouvez pas le masquer, mais vous pouvez le désactiver en redéfinissant 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

merci, j'ai trouvé cette solution, mais nous aimerions le cacher, pas seulement désactiver :(anywat merci! –

+3

il n'y a pas d'autre moyen que de concevoir votre formulaire à partir de zéro. –

+0

ouais mieux faire votre propre formulaire avec le vôtre boîte de contrôle sans le bouton de fermeture puis masquer la boîte de contrôle du formulaire parent – Bahamut

25

Eh bien, vous pouvez le cacher, en supprimant l'ensemble du 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, ce faisant supprime les boutons Réduire et Agrandir.

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

La dernière solution consiste à peindre vous-même la zone non-client. C'est assez difficile à obtenir.

+1

Cela fonctionne aussi, gr manger! Mais * ControlBox = false * est facile à utiliser comme votre chemin. – simmeone

+0

Cela revient à définir 'ControlBox' sur false. En outre, il ne répond pas aux exigences: _J'ai besoin de conserver les boutons Réduire et Agrandir_ – whiteshooz

7

Si vous voulez vraiment le cacher, comme dans "non visible", alors vous devrez probablement créer un formulaire sans bordure et dessiner les composants de la légende vous-même. La bibliothèque VisualStyles a les éléments Windows disponibles. Vous devrez également rajouter dans la fonctionnalité de redimensionner le formulaire ou de déplacer le formulaire 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 que le bouton "fermer" ne soit pas disponible, en particulier lorsque vous voulez un formulaire modal avec des capacités de minimisation. Minimiser une forme modale n'a vraiment aucun sens.

106

Nous pouvons cacher le bouton de fermeture sur la forme en mettant this.ControlBox=false;

+23

Avez-vous lu la question où il a indiqué que ce n'était pas une option? – Servy

+21

Google a-t-il fait une recherche et ce SO AO a été le plus touché. Et cette réponse était ce que je cherchais. Merci Abhishek ... –

+11

Qui cache tous ces boutons de dimensionnement. Non seulement le X. –

1

Dans set « Control Box » = False propriétés de votre formulaire, mais il cacherons minimisés et maximiser ainsi.

2

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

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

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

acclamations

0

si cela est une option que vous pouvez définir

this.FormBorderStyle = FormBorderStyle.None; 

puis recréez les minimiser et maximiser les boutons

private void button1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
Questions connexes