Термины используются взаимозаменяемо. Если вы хотите быть действительно педантичным, то вы можете определить «вложенный класс» для обозначения статического внутреннего класса, который не имеет закрывающего экземпляра. В коде у вас может быть что-то вроде этого:
public class Outer {
public class Inner {}
public static class Nested {}
}
Это не совсем общепринятое определение.
Это делает задание:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
Редактирование: В ответ на беспокойство pix0rs - да Вы корректны, что Вы не будете в состоянии программно закрыть приложение. Однако можно просто удалить обработчик событий для form_closing события прежде, чем закрыть форму:
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
Если Вы посмотрите значение из FormClosingEventArgs e.CloseReason
, оно скажет Вам, почему форма закрывается. Можно тогда решить, что сделать, возможные значения:
Имя элемента - Описание
<час>Ни один - причина закрытия не была определена или не могла быть определена.
WindowsShutDown - операционная система закрывает все приложения перед закрытием.
MdiFormClosing - родительская форма этой формы многодокументного интерфейса (MDI) закрывается.
UserClosing - пользователь закрывает форму через пользовательский интерфейс (UI), например, путем нажатия кнопки Close на окне формы, выбора Близко от системного меню окна или нажатия ALT + F4 .
TaskManagerClosing - Диспетчер задач Microsoft Windows закрывает приложение.
FormOwnerClosing - форма владельца закрывается.
ApplicationExitCall - метод Выхода Класса приложений был вызван.
Я полагаю, что это - правильный способ сделать это:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
e.Cancel = true;
break;
}
base.OnFormClosing(e);
}
Обратите внимание, что это считают невоспитанностью для приложения, чтобы полностью препятствовать тому, чтобы себя закрылся. Необходимо проверить аргументы события в пользу события Closing для определения, как и почему приложение попросили закрыться. Если это из-за завершения работы Windows, Вы не должны предотвращать завершение.
Вы могли обработать FormClosing
событие и установить FormClosingEventArgs.Cancel
на true
.
я использую форму в качестве всплывающего диалогового окна для отображения индикатора выполнения, и я не хочу, чтобы пользователь был в состоянии закрыть его.
, Если пользователь полон решимости закрыть Ваше приложение (и хорошо осведомленный) достаточно для нажатия alt+f4, они, скорее всего, также будут достаточно хорошо осведомлены, чтобы выполнить диспетчер задач и уничтожить приложение вместо этого.
, По крайней мере, с alt+f4 Ваше приложение может сделать корректное завершение работы, вместо того, чтобы просто заставить людей уничтожить его. На основе опыта люди, уничтожающие Ваше приложение, имеют в виду поврежденные файлы конфигурации, поврежденные базы данных, наполовину законченные задачи, которые Вы не можете возобновить, и много других болезненных вещей.
, По крайней мере, запрашивают их с, 'Вы уверенный' вместо того, чтобы утончиться, предотвращая его.
FormClosing назвали бы, даже когда Вы программно закрываете окно? Если так, Вы, вероятно, хотели бы добавить некоторый код, чтобы позволить форме быть закрытой, когда Вы закончены с ним (вместо того, чтобы всегда отменить операцию)