Дайте мне подсказку о событии FormClosing - PullRequest
1 голос
/ 21 июня 2010

У меня есть MainForm.Я могу закрыть его, используя кнопку закрытия (верхний правый угол) или щелкнув по пункту меню miExit.

Моя проблема заключается в том, что когда я щелкнул miExit и ответил «ОК», отображается сообщениеBox TWICE ,Как я могу это исправить?(Я понимаю, почему он отображается дважды, но как я могу избежать этого?)

При закрытии формы и щелчке miExit должно быть сообщение "Выход?"подскажите.

partial class MainForm : Form
{
    void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dr = MessageBox.Show("Exit ?", "Exit", MessageBoxButtons.OKCancel,         MessageBoxIcon.Question);

        if (dr == DialogResult.OK)
        {
            SaveSettings();
        }
        else
        {
            e.Cancel = true;
        }
    }

    void miExit_Click(object sender, EventArgs e)
    {
        DialogResult dr = MessageBox.Show("Exit ?", "Exit", MessageBoxButtons.OKCancel,             MessageBoxIcon.Question);

        if (dr == DialogResult.OK)
        {
    SaveSettings();

            Application.Exit();
        }
    }

    void SaveSettings()
    {
    // save user settings to file ...
    }
}

Ответы [ 4 ]

3 голосов
/ 21 июня 2010

Измените обработчик miExit_Click на вызов Application.Exit()

Application.Exit() автоматически вызывает событие FormClosing во всех открытых формах. И да, эти формы могут отменить выход, установив для их свойства FormClosingEventArgs Cancel значение true.

P.S. Если вы мне не верите, я сошлюсь на документацию для Application.Exit(), бит FormClosing - это первый пункт маркировки под примечаниями.

3 голосов
/ 21 июня 2010

Измените обработчик событий miExit_Click, чтобы он ничего не делал, кроме как вызывал Close, а затем разрешил обработчику FormClosing обрабатывать его в любом случае, когда он закрывается.

0 голосов
/ 21 июня 2010

Заменить содержимое miExit_Click на this.Close ();который, в свою очередь, вызовет MainForm_FormClosing, чтобы вам не понадобился этот код дваждыРабота выполнена

0 голосов
/ 21 июня 2010

Применить СУХОЙ здесь. У вас есть избыточный код для закрытия формы.

http://en.wikipedia.org/wiki/Don't_repeat_yourself

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...