Question

Quelle est la meilleure façon de désactiver Alt + F4 dans un formulaire gagnant c# pour empêcher l'utilisateur de fermer le formulaire ?

J'utilise un formulaire comme boîte de dialogue contextuelle pour afficher une barre de progression et je ne souhaite pas que l'utilisateur puisse la fermer.

Était-ce utile?

La solution

Cela fait le travail:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}

Modifier:En réponse à la préoccupation de Pix0rs, oui, vous avez raison de dire que vous ne pourrez pas fermer l'application par programme.Cependant, vous pouvez simplement supprimer le gestionnaire d'événements pour l'événement form_closing avant de fermer le formulaire :

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();

Autres conseils

Si vous regardez le valeur de FormClosingEventArgs e.CloseReason, il vous dira pourquoi le formulaire est fermé.Vous pouvez alors décider quoi faire, les valeurs possibles sont :

Nom de membre - Description


Aucun - La cause de la fermeture n'a pas été définie ou n'a pas pu être déterminée.

Arrêt de Windows - Le système d'exploitation ferme toutes les applications avant de s'arrêter.

MdiFormClosing - Le formulaire parent de ce formulaire d'interface multidocument (MDI) se ferme.

UtilisateurClosing - L'utilisateur ferme le formulaire via l'interface utilisateur (UI), par exemple en cliquant sur le bouton Fermer de la fenêtre du formulaire, en sélectionnant Fermer dans le menu de contrôle de la fenêtre ou en appuyant sur ALT+F4.

TaskManagerFermeture - Le Gestionnaire des tâches de Microsoft Windows ferme l'application.

FormulairePropriétaireFermeture - Le formulaire propriétaire se ferme.

ApplicationSortieAppel - La méthode Exit de la classe Application a été invoquée.

Je pense que c'est la bonne façon de procéder :

protected override void OnFormClosing(FormClosingEventArgs e)
{
  switch (e.CloseReason)
  {
    case CloseReason.UserClosing:
      e.Cancel = true;
      break;
  }

  base.OnFormClosing(e);
}

Notez qu’il est considéré comme une mauvaise forme qu’une application s’empêche complètement de se fermer.Vous devez vérifier les arguments de l'événement Closing pour déterminer comment et pourquoi votre application a été invitée à se fermer.Si cela est dû à un arrêt de Windows, vous ne devez pas empêcher la fermeture.

Vous pourriez gérer le FormClosing événement et décor FormClosingEventArgs.Cancel à true.

J'utilise un formulaire comme boîte de dialogue contextuelle pour afficher une barre de progression et je ne souhaite pas que l'utilisateur puisse la fermer.

Si l'utilisateur est déterminé à fermer votre application (et est suffisamment informé) pour appuyer sur alt+f4, il sera probablement également suffisamment informé pour exécuter le gestionnaire de tâches et supprimer votre application à la place.

Au moins avec alt+f4, votre application peut effectuer un arrêt progressif, plutôt que de simplement obliger les gens à la tuer.Par expérience, les gens qui tuent votre application signifient des fichiers de configuration corrompus, des bases de données cassées, des tâches à moitié terminées que vous ne pouvez pas reprendre et bien d'autres choses douloureuses.

Demandez-leur au moins « êtes-vous sûr » plutôt que de l'empêcher catégoriquement.

C'est un hack pour désactiver Alt + F4.

private void test_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4) 
    { 
        e.Cancel = true; 
    }    
}

Cela fait le travail:

bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
  myButtonWasClicked = true;
  Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
  if (myButtonWasClicked)
  {
    e.Cancel = false;
  }
  else
  {
    e.Cancel = true;
  }


}

FormClosing serait-il appelé même lorsque vous fermez la fenêtre par programme ?Si tel est le cas, vous souhaiterez probablement ajouter du code pour permettre la fermeture du formulaire lorsque vous en avez terminé (au lieu de toujours annuler l'opération).

Abonnez-vous à l'événement FormClosing

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing;
}

Une seule ligne dans le corps de la méthode.

Masquez le bouton de fermeture du formulaire en utilisant ce qui suit dans le constructeur du formulaire :

this.ControlBox = false;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top