Problem z zamykaniem programu

0

Witam. Co powinienem poprawić w tym kodzie, aby zamykanie programu wyglądało jak np. w Wordzie?

private void zakończToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (iloscSlow > 0)
            {
                DialogResult wynik = MessageBox.Show("Czy chcesz zapisać słownik przed jego zamknięciem?", "Uwaga",
                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                if (wynik == DialogResult.Yes)
                {
                    zapiszToolStripMenuItem_Click(sender, e);
                    Application.Exit();
                }
                else
                {
                    if (wynik == DialogResult.No)
                    {
                        Application.Exit();
                    }
                }
            }
            else
            {
                Application.Exit();
            }
        }

        private void Edytor_FormClosing(object sender, FormClosingEventArgs e)
        {
            zakończToolStripMenuItem_Click(sender, e);
        }

Z góry dzięki za pomoc

1

A jak wygląda zamykanie programu w wordzie? Niestety nie mam zainstalowanego więc nie mogę sprawdzić.

ale przy okazji - pokombinowałeś:

z ifami: prościej by było

if (wynik == DialogResult.Cancel) return;
if (wynik == DialogResult.Yes) zapiszToolStripMenuItem_Click(sender, e);
Application.Exit();

z funkcjami:
podczas funkcji FormClosing (zamykania) wywołujesz funkcję pytającą czy zamknąć. W FormClosing powinieneś pytać czy zapisać, w zakończ~~~~itemclick tylko wywoływać Application.Exit();

Działa ci ten kod?

0

Jak nie masz Worda, to zobacz w Notatniku :)

Dalej mam problem z tym kodem, a chodzi mi o to, by:
1)po naciśnięciu Tak lub Nie wykonało się (lub nie) zapisanie pliku, po czym program powinien się wyłączyć, zamiast pokazywać mi po raz drugi to okienko.
2)po naciśnięciu anuluj program nie ma prawa się wyłączyć

1

Czyli miałem rację że to nie powinno działać :>

MSM napisał(a)

podczas funkcji FormClosing (zamykania) wywołujesz funkcję pytającą czy zamknąć. W FormClosing powinieneś pytać czy zapisać, w zakończ~~~~itemclick tylko wywoływać Application.Exit();

Czyli (nie mieszając się do twojej konwencji nazewniczej - naprawdę, można zmienić nazwy tych metod)

private void zakończToolStripMenuItem_Click(object sender, EventArgs e)
{
	Application.Exit();
}

private void Edytor_FormClosing(object sender, FormClosingEventArgs e)
{
	DialogResult wynik = MessageBox.Show("Czy chcesz zapisać słownik przed jego zamknięciem?", "Uwaga",
		MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
	
	if (wynik == DialogResult.Cancel) e.Cancel = true;
	if (wynik == DialogResult.Yes) zapiszToolStripMenuItem_Click(sender, e);
}

PS.
rozumiem że zapiszToolStripMenuItem_Click(sender, e) zapisuje do pliku? To nie jest najlepsze rozwiązanie, bo musisz "symulować" kliknięcia użytkownika. Lepiej stworzyć metodę "Zapisz()" która zapisuje, i w funkcji zapiszToolStripMenuItem_Click i FormClosing ją wywołać

0

Dzięki :) Teraz działa, jak powinno :) Nie sądziłem, że można to zrobić za pomocą tak krótkiego kodu :)

0

Z kliknięciem Zakończ poradziłem sobie w taki sposób:

private void zakończToolStripMenuItem_Click(object sender, EventArgs e)
{
        Edytor.ActiveForm.Close();
}

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