2010-07-02 20 views
3

La programmation en C# .NET 4.0 est ma dernière passion, et j'aimerais savoir comment ajouter des fonctionnalités au bouton standard Windows.Forms Exit (le X rouge dans le coin supérieur droit du formulaire).Ajouter des fonctionnalités à Windows.Forms bouton de sortie?

J'ai trouvé un moyen de désactiver le bouton, mais puisque je pense que cela compromet l'expérience de l'utilisateur, je voudrais plutôt brancher quelques fonctionnalités.

Comment désactiver le bouton de sortie:

#region items to disable quit-button 
    const int MF_BYPOSITION = 0x400; 
    [DllImport("User32")] 
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags); 
    [DllImport("User32")] 
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 
    [DllImport("User32")] 
    private static extern int GetMenuItemCount(IntPtr hWnd); 
    #endregion 

...

private void DatabaseEditor_Load(object sender, EventArgs e) 
    { 
     this.graphTableAdapter.Fill(this.diagramDBDataSet.Graph); 
     this.intervalTableAdapter.Fill(this.diagramDBDataSet.Interval); 

     // Disable quit-button on load 
     IntPtr hMenu = GetSystemMenu(this.Handle, false); 
     int menuItemCount = GetMenuItemCount(hMenu); 
     RemoveMenu(hMenu, menuItemCount - 1, MF_BYPOSITION); 
    } 

Mais comment diable puis-je attacher une méthode, avant la sortie de l'application avec la sortie bouton standard. Je voudrais XmlSerialize une liste avant de quitter le formulaire Windows.

Répondre

4
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if(MessageBox.Show("Are you sure you want to exit?", "Confirm exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
} 
+0

Thanx Paul! Cela a fait l'affaire :) BR –

+0

Pour l'enregistrement, l'événement est appelé 'FormClosing', donc lors de l'ajout de la méthode en utilisant l'inspecteur des propriétés, il appelle la méthode' Form1_FormClosing'. Je n'arrivais pas à comprendre pourquoi il n'y avait pas d'événement 'Closing' et je me suis rendu compte que c'était 'FormClosing'. – styfle

5

Si vous voulez écrire des codes avant sous forme fermée, utilisez événement FormClosing

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 

    } 
+0

Thanx Serkan! Cela a fait l'affaire :) BR –

+0

Votre bienvenue ... –

1

La meilleure façon que j'ai trouvé est en fait de créer un gestionnaire d'événements qui appellera la méthode que vous voulez appeler .

Dans le constructeur:

this.Closed += new EventHandler(theWindow_Closed); 

Ensuite, vous créez la méthode:

private void theWindow_Closed(object sender, System.EventArgs e) 
{ 
    //do the closing stuff 
}