Instrukcja wykonuje się 2 razy

0

Witam mam pewien problem z instrukcja zamykającą aplikację mianowicie.

  public static void zamykanie(FormClosingEventArgs pZmienna)
        {
            DialogResult wynik = MessageBox.Show("Czy napewno chcesz zamknąć program ?", "Zamykanie programu", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            if (wynik == DialogResult.OK)
            {
                Application.Exit();
            }
            else
            {
                pZmienna.Cancel = true;
            }
        }

Jest kod odpowiedzialny za wyświetlenie okna z informacja o zamykaniu programu w momencie gdy owy program wyłączamy.

  1. gdy wciśniemy "Cancel" program zachowuje się prawidłowo czyli nie wyłącza się.

  2. gdy wciśniemy "OK" program zachowuje się jak by nic nie zrobił i znowu na ekranie mamy okno i informacją o zamykaniu programu i gdy 2 raz naciśniemy "OK" wtedy się zamyka

3.gdy wciśniemy "OK" program zachowuje się jak by nic nie zrobił i znowu na ekranie mamy okno i informacją o zamykaniu programu i gdy wtedy naciśniemy przycisk "Cancel "to program i tak sie zamyka.

Proszę o komentarz i wyjaśnienie błędu.

0

Nie wywołuj Application.Exit(). Nie rób nic, po prostu opuść funkcję normalnie.

0

Witam, dzięki za odpowiedź.

Niestety muszę zrobićApplication.Exit(); ponieważ muszę zamknąć cały proces a nie tylko okno. A okno które na funkcja występuje nie jest moim głównym oknem tylko jednym z wielu. Chyba że można jakoś inaczej zamknąć cały proces.

Pozdrawiam!

0

Po kliknięciu "OK" odpalasz

Application.Exit()

które najprawdopodobniej generuje zdarzenie jeszcze raz odpalające metodę "zamykanie".

Żeby uniknąć dwukrotnego wyświetlania messageboxa możesz użyć jakiejś flagi:

private bool flag = true;
public static void zamykanie(FormClosingEventArgs pZmienna)
        {
if(flag){           
 DialogResult wynik = MessageBox.Show("Czy napewno chcesz zamknąć program ?", "Zamykanie programu", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
            if (wynik == DialogResult.OK)
            {
                flag = false;
                 Application.Exit();
            }
            else
            {
                pZmienna.Cancel = true;
            }
        } 
        }
0

Witam, też tak pomyślałem ale nie wiem jak inaczej zabić cały proces a nie zamykać samego okna. Poza tym okno to powinno sie pojawiać w kółko i nigdy by się nie dało go zamknąć więc chyba nie o to chodzi że odpal się jeszcze raz ta funkcja.

Pozdrawiam!

0

A nie prościej w takim wypadku odpiąć zdarzenie?

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult wynik = MessageBox.Show("Czy napewno chcesz zamknąć program ?", "Zamykanie programu", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
    if (wynik == DialogResult.OK)
    {
        this.FormClosing -= this.Form2_FormClosing;
        Application.Exit();
    }
    else
    {
        e.Cancel = true;
    }
}

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