c# - visual - winforms vs wpf




Masquer le formulaire au lieu de fermer lorsque le bouton de fermeture est cliqué (5)

Ainsi:

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing) 
    {
        e.Cancel = true;
        Hide();
    }
}

(via Tim Huffman )

Lorsqu'un utilisateur clique sur le bouton X d'un formulaire, comment puis-je le masquer au lieu de le fermer?

J'ai essayé this.hide() dans FormClosing mais il ferme toujours le formulaire.


Basé sur une autre réponse, vous pouvez le mettre dans votre code de formulaire:

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
        if (e.CloseReason == CloseReason.UserClosing)
        {
            e.Cancel = true;
            Hide();
        }
    }

Le remplacement est préféré: MSDN "La méthode OnFormClosing permet également aux classes dérivées de gérer l'événement sans attacher un délégué.C'est la technique préférée pour gérer l'événement dans une classe dérivée."


De MSDN :

Pour annuler la fermeture d'un formulaire, définissez la propriété Cancel de FormClosingEventArgs passée à votre gestionnaire d'événements sur true .

Alors annulez puis cachez.


J'ai déjà commenté dans une réponse précédente mais j'ai pensé que je fournirais le mien. En fonction de votre question, ce code est similaire à la première réponse, mais ajoute la fonctionnalité mentionnée ci-dessous:

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

Si l'utilisateur tape simplement le X dans la fenêtre, le formulaire se cache; si quelque chose d'autre tel que Task Manager, Application.Exit() , ou Windows shutdown, le formulaire est correctement fermé, puisque l'instruction de return serait exécutée.


Si vous voulez utiliser la méthode show / hide, je l'ai fait moi-même pour une structure de menu, un jeu que j'ai fait récemment ... Voici comment je l'ai fait:

Créez-vous un bouton et pour ce que vous aimeriez faire, par exemple un bouton «Suivant» et faites correspondre le code suivant à votre programme. Pour un bouton suivant dans cet exemple, le code serait:

btnNext.Enabled = true; //This enabled the button obviously
this.Hide(); //Here is where the hiding of the form will happen when the button is clicked
Form newForm = new newForm(); //This creates a new instance object for the new form
CurrentForm.Hide(); //This hides the current form where you placed the button.

Voici un extrait du code que j'ai utilisé dans mon jeu pour vous aider à comprendre ce que j'essaie d'expliquer:

    private void btnInst_Click(object sender, EventArgs e) 
    {
        btnInst.Enabled = true; //Enables the button to work
        this.Hide(); // Hides the current form
        Form Instructions = new Instructions(); //Instantiates a new instance form object 
        Instructions.Show(); //Shows the instance form created above
    }

Il existe donc une méthode show / hide avec quelques lignes de code, plutôt que de faire un gros morceau de code pour une tâche aussi simple. J'espère que cela aidera à résoudre votre problème.





winforms