Я хочу установить 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?
Я не думаю, что вы сможете это сделать, я всегда использую флаг
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);
}
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
Вместо создания дополнительной переменной:
appClosing = true;
this.Close();
Вы можете вызвать:
Application.Exit();
И тогда e.CloseReason будет равно
CloseReason.ApplicationExitCall
Что может быть тем, что вам нужно.