Zdarzenie ApplicationExit

0

Dlaczego MessageBox informujący o zakończeniu działania programu pojawia się tylko wtedy gdy aplikacja zamykana jest krzyżykiem?
Kiedy wciskam przycisk "Wyjscie" aplikacja zamyka się bez wyświetlania messageboxa.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace DrzwiiOkna
{

    class MyForm : Form
    {
        private Button przycisk = new Button();

        private void Wyjscie(object sndr, EventArgs ea)
        {
            
            Application.Exit();
        }

        private void OnWyjscie(object sndr, EventArgs ea)
        {
            MessageBox.Show("dobranoc!","Uwaga");
            
        }

        public MyForm()
        {
            Text = "Aplikacja";
            Width = 500;
            Height = 400;
            przycisk.Text = "Wyjście";
            
            przycisk.Height = 50;
            przycisk.Width = 100;

            przycisk.Left = (ClientSize.Width - przycisk.Width) / 2;
            przycisk.Top = (ClientSize.Height - przycisk.Width) / 2;

            Controls.Add(przycisk);

            MainMenu mm = new MainMenu();

            MenuItem plk = new MenuItem("Plik");
            MenuItem opc = new MenuItem("Opcje");
            MenuItem plk1 = new MenuItem("Nowy");

            mm.MenuItems.Add(plk);
            mm.MenuItems.Add(opc);
            plk.MenuItems.Add(plk1);

            Menu = mm;
            

            przycisk.Click += new EventHandler(Wyjscie);
            Application.ApplicationExit += new EventHandler(OnWyjscie);
        }
    }
    
    class Program
    {
        
        static void Main(string[] args)
        {
            Application.Run(new MyForm());
        }
    }
}
 
0

A czy to nie jest tak, że najpierw zamykana jest aplikacja a potem już MessageBox z OnWyjscie nie ma szans żeby się wyświetlić?

0

metoda ma taki opis więc chyba powinno się wyświetlać:
Application.Exit: Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed.

i dlaczego dziala z krzyzykiem? co to za tajemnica xD

0

Application Exit zatrzymuje petle komunikatow wiec nic wiecej juz sie chyba nie wyswietli z tego co rozumiem;)

More: http://stackoverflow.com/questions/12977924/how-to-properly-exit-a-c-sharp-application

Nie możesz zrobić po prostu:

private void Wyjscie(object sndr, EventArgs ea)
        {
            MessageBox.Show("dobranoc!","Uwaga");
            Application.Exit();
        }
 

?? ;)

0
karpov napisał(a):

Application Exit zatrzymuje petle komunikatow wiec nic wiecej juz sie chyba nie wyswietli z tego co rozumiem;)

More: http://stackoverflow.com/questions/12977924/how-to-properly-exit-a-c-sharp-application

Nie możesz zrobić po prostu:

private void Wyjscie(object sndr, EventArgs ea)
        {
            MessageBox.Show("dobranoc!","Uwaga");
            Application.Exit();
        }
 

?? ;)

Mogę i tak wcześniej też robiłem tylko że skoro istnieje specjalne zdarzenie obsługujące zamykanie programu to chciałem je wykorzystać a nie stosować takie patenty xD

https://msdn.microsoft.com/en-us/library/system.windows.forms.application.applicationexit(v=vs.110).aspx

"Occurs when the application is about to shut down."

1 użytkowników online, w tym zalogowanych: 0, gości: 1