60 / 60 / 11
Регистрация: 30.06.2010
Сообщений: 260
1

Как закрыть многооконное приложение?

23.03.2011, 06:44. Показов 3751. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Когда нажимаю правый верхний крест (закрыть программу), его приходится нажимать до тех пор, пока не закроются все дочерние формы (а они закрываются по-одной) этого многооконного приложения.
Если я при нажатии на крест пишу обработчик: Application.Exit(); то все равно ничего не происходит - не выходит из приложения, пока не нажму крест столько раз, сколько дочерних окон открыто. this.Close(); тоже не помогает

Добавлено через 11 минут
Но если открыто 4 дочерних окна, то три раза надо нажимать, чтоб закрылось.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2011, 06:44
Ответы с готовыми решениями:

Как закрыть приложение
Я начинающий. Как закрыть приложение, т.е. то, что в других языках делается оператором end,...

Как закрыть стороннее приложение
Всем привет, требуется закрыть стороннее приложение (пожарный сервер), правой клик по иконке в...

Как полностью закрыть приложение?
Как полностью закрыть приложение? У меня он закрывается, но продолжает висеть в процессах и при...

Как закрыть оконное приложение?
Ребят, как закрыть оконное приложение?

9
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.03.2011, 08:09 2
Application.Exit() отлично работает. У тебя нигде не стоит перехват закрытия окна?

Добавлено через 55 секунд
Цитата Сообщение от Wild Wolf Посмотреть сообщение
this.Close();
закрывает только то окно, в котором вызвано
0
60 / 60 / 11
Регистрация: 30.06.2010
Сообщений: 260
23.03.2011, 08:27  [ТС] 3
Сначала я сделала по событию FormClosing перехват, чтоб он спрашивал: вы действительно хотите выйти? но потом, когда он мне начал по двадцать раз закрывать, я вместо этого поставила Application.Exit();
Не помогло. Тогда я всё закомментировала в этом обработчике - эффект тот же. Но сам обработчик в коде есть.

Уберу, пожалуй, событие..

Не-а не получается. Убрала FormClosing - все равно сто раз надо нажимать на крест при открытых дочерних окнах.
Дочерние, кстати, тоже имеют перехват по закрытию, чтоб не закрывались, а прятались просто

Сейчас у меня примерно так:
C#
1
2
3
4
5
6
7
private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
        {    
            //if (MessageBox.Show("Выйти из программы?", "Внимание", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
            //{
                Application.Exit();
            //}
        }
но не работает...
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.03.2011, 08:33 4
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Уберу, пожалуй, обработчик..
Если обработчик пустой (ничего не рализует), то Application.Exit() срабатывает

Добавлено через 50 секунд
Wild Wolf, пройди трассировщиком, посмотри, что происходит...
0
60 / 60 / 11
Регистрация: 30.06.2010
Сообщений: 260
23.03.2011, 08:56  [ТС] 5
Создала простой проект по тому же принципу. Прошла трассировщиком.
Он, похоже, когда выполняет ApplicationExit(); переходит на события закрытия дочерних окон, а раз у них в FormClosing() стоит e.Cancel = true; то он и выходит из своего Exit-а... И пока не скроются все дочерние окошки, он не закрывает приложение.

Наверное, перед ApplicationExit надо принудительно спрятать все дочерние окна, а потом выполнить уже Exit
Вложения
Тип файла: rar WindowsFormsApplication6.rar (80.8 Кб, 34 просмотров)
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.03.2011, 08:59 6
Цитата Сообщение от Wild Wolf Посмотреть сообщение
FormClosing() стоит e.Cancel = true;
Ну так эта конструкция запрещает закрытие окна...
0
60 / 60 / 11
Регистрация: 30.06.2010
Сообщений: 260
23.03.2011, 09:00  [ТС] 7
Так это ж дочернего
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.03.2011, 09:02 8
Думай как ее обойти, чтобы на момент закрытия окон она была e.Cancel = false

Добавлено через 1 минуту
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Так это ж дочернего
Без разницы. Метод закрытия окна не срабатывает - операция закрытия всего приложения не срабатывает
1
60 / 60 / 11
Регистрация: 30.06.2010
Сообщений: 260
23.03.2011, 09:05  [ТС] 9
Вот так пробую:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Хотите выйти?", "Внимание!", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
            {
                F1.Hide();
                F2.Hide();
                F3.Hide();
                F4.Hide();
                Application.Exit();
            }
 
        }
Все равно 2 раза спрашивает.. Но если убираю Message,
C#
1
2
3
4
5
6
7
8
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
                F1.Hide();
                F2.Hide();
                F3.Hide();
                F4.Hide();
                Application.Exit();
        }
то выходит.

Я подумаю, или без Message оставлю, или буду переменную вводить булевую, чтоб e.Cancel = var;
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.03.2011, 19:35 10
Цитата Сообщение от Wild Wolf Посмотреть сообщение
F1.Hide();
F2.Hide();
F3.Hide();
F4.Hide();
Это лишнее. Метод Hide cкрывает элемент управления от пользователя, но при этом он продолжает существовать.
0
23.03.2011, 19:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2011, 19:35
Помогаю со студенческими работами здесь

Как создать приложение, которое невозможно закрыть даже завершая процесс
Привет друзья. Обращаюсь к Вам по следующему вопросу: Необходимо сделать не убиваемое консольное...

закрыть приложение Word
как программно закрыть ворд приложение. Я с таким кодам закрываю, но закрывается толка документ:...

Создать приложение, которое нельзя закрыть
Здравствуйте! Пишу мелкое приложение, в котором устанавливается лимит времени использования ПК. По...

Многооконное приложение
вопрос возможно простой, но много оконные приложения, где у каждого окна свой cpp, это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru