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.
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
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.
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.
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".
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.
Vous pouvez définir la propriété ControlBox
sur False
, mais toute la barre de titre aura disparu, mais le titre lui-même ...
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
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.
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
Accédez à Form Properties
et définissez ControlBox
et ShowIcon
sur false.
Ensuite, effacez tout le texte de la propriété text
du formulaire.