web-dev-qa-db-fra.com

Supprimer/désactiver visuellement le bouton de fermeture de la barre de titre .NET

On m'a demandé de supprimer ou de désactiver le bouton de fermeture de notre application VB .NET 2005 MDI. Aucune forme native d'un formulaire ne permet de griser le bouton de fermeture pour empêcher l'utilisateur de le fermer. Je ne me souviens pas d'avoir vu quoi que ce soit dans la classe de formulaire qui me permette de le faire.

Existe-t-il un appel d'API ou une propriété magique à définir ou une fonction permettant d'appeler .NET 2005 ou une version ultérieure?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Plus d'information:

J'ai besoin de maintenir la fonctionnalité minimiser/maximiser

Je dois conserver la barre de titre d'origine car les méthodes de dessin du formulaire sont déjà très complexes.

9
Jrud

Sur la base des informations les plus récentes que vous avez ajoutées à votre question, passez à la fin de ma réponse.


C’est ce que vous devez définir sur false: Propriété Form.ControlBox

MAIS, vous perdrez les boutons Réduire et Agrandir ainsi que le menu de l'application (en haut à gauche).

Sinon, remplacez OnClose et définissez Cancel sur true (exemple en C #):

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
    {
        e.Cancel = true;
    }

    base.OnFormClosing(e);
}

Si aucune de ces solutions n'est acceptable et que vous ne devez désactiver que le bouton de fermeture, vous pouvez choisir la route pinvoke/createparams

Comment désactiver le bouton Fermer du formulaire Windows à l'aide d'une application .NET

Voici la version VB du code de 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 
27
Philip Wallace

Vous pouvez désactiver le bouton Fermer et l’option de menu Fermer dans le menu Système en modifiant le "style de classe" de la fenêtre. Ajoutez le code suivant à votre formulaire:

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

Cela n'empêchera pas simplement la fenêtre de se fermer, mais le bouton sera en gris. C'est C # mais je pense qu'il devrait être facile de le traduire en VB.

10
jdm

Voici un moyen simple de supprimer le bouton de fermeture:
1. Sélectionnez le formulaire
2. Maintenant, allez à Properties.
3. Recherchez ControlBox et remplacez la valeur par False.

Cela supprimera tous les boutons de contrôle (par exemple, réduire, maximiser, quitter) ainsi que l'icône figurant également dans le coin à gauche avant le titre.

6
user2849882

Vous devriez pouvoir remplacer l'événement OnClose du formulaire. Cela est courant lorsqu'une application se réduit dans la barre d'état système lorsqu'elle est "fermée".

3
Dave Swersky

Lorsque vous appuyez sur la zone X du formulaire. Le Form1_Closing est terminé en premier, puis le Form1_Closed est terminé.

Le e.Cancel = True dans le Form1_Closing - empêche donc l'appel de Form1_Closed, laissant ainsi votre formulaire toujours actif.

2
jmweb

Vous pouvez définir la propriété ControlBox sur False, mais toute la barre de titre aura disparu, mais le titre lui-même ...

1
jonaspp

Empêche de fermer le formulaire, mais cache-le:

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
1
user3781113

Ce que jmweb a dit ici est OK aussi. Le bouton Fermer X ne disparaîtra pas si vous annulez l'événement à la fermeture du formulaire. Mais pour ce faire, vous devez libérer les processus dont le formulaire a besoin, puis fermer le formulaire.

Me.Dispose()
Me.Close()

Cela a fonctionné pour moi en utilisant Menu Strip.

0
azemoten

Sélectionnez (ou cliquez) sur le formulaire lui-même Cliquez sur les événements dans la fenêtre de propriété (la petite icône représentant un éclair). Recherchez Form.Closing et double-cliquez dessus. Puis tapez: e.cancel=true

0
small_town_girl

Création d'un formulaire sans barre de titre dans Visual Basic.

Accédez à Form Properties et définissez ControlBox et ShowIcon sur false.

Ensuite, effacez tout le texte de la propriété text du formulaire.

0
Rahul Gurujala