Установка программно closereason

Я хочу установить CloseReason формы после того, как я назову Это. Близко () в форме.

Обычно, это формируется, закрывается, отдельно называя Это. Близко (), но я хочу спросить пользователя, если они ДЕЙСТВИТЕЛЬНО хотят закрыть форму и отправить mbox с некоторой информацией, Но у меня есть это:

protected override void OnFormClosing(FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.UserClosing)
        {
            if (MessageBox.Show("¿Desea Salir realmente?\nLa factura aun no ha sido pagada por lo que volverá a la pantalla anterior y podrá seguir agregando productos") == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
        base.OnFormClosing(e);
    }

Но каждый раз я называю Это. Близко (); CloseReason всегда является UserClosing.

Я могу установить его после вызова, или я должен обработать отличающийся OnFormClosing?

14
задан Cœur 2 August 2017 в 13:30
поделиться

3 ответа

Я не думаю, что вы сможете это сделать, я всегда использую флаг

appClosing = true;
this.Close();

, а затем проверю:

protected override void OnFormClosing(FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.UserClosing && !appClosing)
        {
            if (MessageBox.Show("¿Desea Salir realmente?\nLa factura aun no ha sido pagada por lo que volverá a la pantalla anterior y podrá seguir agregando productos") == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
        base.OnFormClosing(e);
    }
11
ответ дан 1 December 2019 в 07:19
поделиться

CloseReason - это перечисление со следующими членами:

None
WindowsShutDown
MdiFormClosing
UserClosing
TaskManagerClosing
FormOwnerClosing
ApplicationExitCall

Что наводит меня на мысль, что оно зависит от условий, связанных с поведением форм в целом (например, закрытие родительской формы закрывает свои детские). Таким образом, для того, чтобы аргумент имел, скажем, CloseReason.ApplicationExitCall, событие должно быть вызвано вызовом Application.Exit.

То же самое, скажем, CloseReason.FormOwnerClosing, в предположении, что ваши дочерние формы вызываются с помощью формы. Show(Parent)

Если ваша цель - просто получить дополнительную информацию о том, почему форма закрывается, вы можете просто сохранить ее внутри объекта формы в качестве публичного атрибута или свойства для доступа к ней позже, предполагая, что упомянутая форма не была расположена.

Предоставление информации о мотивах изменения CloseReason, вероятно, также поможет.

Страница CloseReason msdn для справки http://msdn.microsoft.com/en-us/library/system.windows.forms.closereason.aspx

5
ответ дан 1 December 2019 в 07:19
поделиться

Вместо создания дополнительной переменной:

appClosing = true; 
this.Close();

Вы можете вызвать:

Application.Exit();

И тогда e.CloseReason будет равно

CloseReason.ApplicationExitCall

Что может быть тем, что вам нужно.

12
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: