Как я могу создать окно сообщения, которое фиксирует ответ пользователя? - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь просмотреть окно сообщения. это должно происходить, когда пользователь пытается выйти из программы, когда активны дочерние окна. если нет активных дочерних окон, приложение должно завершиться. Я написал некоторый код, но когда пользователь нажимает НЕТ, окно сообщения немедленно появляется снова. Если у вас есть лучший способ сделать это, пожалуйста, не стесняйтесь поделиться, спасибо.

private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
    {
        Form child = this.ActiveMdiChild;

        if(child != null)
        {
            DialogResult res = 
                MessageBox.Show( child.Name +
                "Do you want to exit?", "Exit",
                MessageBoxButtons.YesNo, MessageBoxIcon.Warning);


            if (res == DialogResult.No)
            {
                e.Cancel = true;

                child.Focus();

            }
            else if (res == DialogResult.Yes)
            {

                Application.Exit();

            }

        }
        else if (child == null)
        {
            Application.Exit();
        }   

    }

Ответы [ 4 ]

3 голосов
/ 27 января 2012

Согласно MSDN , если есть дочерняя форма, которая отменила закрытие, тогда для главной формы e.Cancel будет уже установлено значение true. Также нет необходимости вызывать Application.Exit(), потому что после закрытия основной формы приложение должно завершиться. Попробуйте это:

private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
    Form child = this.ActiveMdiChild;

    if (child != null)
    {
        DialogResult res = 
            MessageBox.Show( child.Name +
            "Do you want to exit?", "Exit",
            MessageBoxButtons.YesNo, MessageBoxIcon.Warning);


        if (res == DialogResult.No)
        {
            e.Cancel = true;
            child.Focus();
        }
        else
        {
            e.Cancel = false;
        }
    }
}
0 голосов
/ 27 января 2012
else if (res == DialogResult.Yes)
            {

                Application.Exit();

            }

просто удалите это из кода кода

0 голосов
/ 27 января 2012

Это из-за вызова Application.Exit ().Зачем вам это нужно, если это все-таки основная форма?Вы можете отфильтровать это, добавив эту проверку вверху функции

if(e.CloseReason == CloseReason.ApplicationExitCall) return;
0 голосов
/ 27 января 2012

Возможно, вы обрабатываете событие FormClosing несколько раз.Можете ли вы вставить код, который добавляет MainWindow_FormClosing к событию?

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