Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
1

Закрыть модальную форму изнутри

08.08.2010, 23:13. Показов 3818. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Поясню, откуда взялся такой вопрос.
Создаются некие картинки (каждая соответствует месяцу), эти картинки
показываются на модальной форме, юзер совершает с ними какие-то действия,
закрывает, берет следующий месяц и т.д.
Но тут выясняется, что действмя эти однотипны и юзеру нужно только
эадать набор этих действий, временной интервал, нажать на кнопочку
и получить результат.
Все это я прекрасно делаю, организовав цикл по месяцам, в обработчике
OnShow выполняю требуемое и говорю Close();
Форма не закрывается. Приходится щелкать по крестику.
Пробовал
C++ Скопировано
1
SendMessage(Handle, WM_DESTROY, 0, 0)
- результат тот же.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2010, 23:13
Ответы с готовыми решениями:

Закрыть модальную форму
Столкнулся со следующей проблемой. У меня в проекте есть главная форма, с которой я по кнопке открываю модально вторую форму. void...

Закрыть форму и открыть форму
Как закрыть не главную форму и запустить заново с ее начальным состоянием. Поясню. В Form2 у компонента radiobutton изначально...

Закрыть форму(не главную)
Собственно на главной форме создается другая(использую как меню) Application->CreateForm(__classid(TForm2), &Form2); При попытке...

9
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.08.2010, 23:30 2
2 формы первая закрытая со второй работаем
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
09.08.2010, 00:49  [ТС] 3
Sasha, чуток не тот случай. Там из кода 2-й формы закрывалась 1-я. А мне нужно из данной - эту же. Наверное, все просто, но от жары не соображается

Добавлено через 9 минут
Переставил все хозяйство в обработчик EvActivate.
Вместо Close(); попробовал
C++ Скопировано
1
SendMessage(Handle, WM_CLOSE, 0, 0);
- не реагирует

Добавлено через 3 минуты
Т.е. - как заставить модальную форму саму себя щелкнуть по крестику?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
09.08.2010, 02:12 4
Day, у меня такое впечатление, что вы где-то в другом месте ошиблись...

Если вы вызываете вторую форму методом ShowModal, то вполне спокойно можете закрыть её через:
C++ Скопировано
1
2
Close();
Perform(WM_CLOSE,0,0);
1
 Аватар для abiprofi
48 / 48 / 7
Регистрация: 04.08.2010
Сообщений: 110
09.08.2010, 04:58 5
Day, вот пример:

.h - Form1
C++ Скопировано
1
#include "Unit2.h"
.cpp - Form1
C++ Скопировано
1
2
3
4
5
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Form2->ShowModal();//можно Form2->Show();
}
.h - Form2
C++ Скопировано
1
2
private:
int count;
.cpp - Form2
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
 if(Timer1->Enabled){Timer1->Enabled = false;}
 Label1->Caption = "10";
 count = 10;
 Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
 count--;
 Label1->Caption = IntToStr(count);
 if(count == -1)
 {
  Timer1->Enabled = false;
  //закрываемся
  Close();
 }
}
Вложения
Тип файла: zip Project1.zip (765.1 Кб, 19 просмотров)
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
09.08.2010, 18:10  [ТС] 6
Пришлось поместить на форму таймер и по первому его тику делать Close();
Заработало.
Но теоретический вопрос остался - из обработчика какого СОБСТВЕННОГО события формы можно ее заставить покончить с собой? Или этого сделать принципиально нельзя?
Ведь по смыслу моей задачи никакой таймер не нужен - сделал свое дело - и застрелись.

Спасибо всем, кто принял участие.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,423
Записей в блоге: 2
09.08.2010, 22:31 7
У меня в OnShow тоже не работает, а так нормально
C++ Скопировано
1
2
3
4
5
6
7
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Canvas->MoveTo(10,10);
Canvas->LineTo(50,100);
Sleep(2000);
Close();
}
1
2 / 2 / 0
Регистрация: 10.08.2009
Сообщений: 13
10.08.2010, 21:54 8
Еще можно внутри формы присвоить переменной ModalResult ненулевое значение. Тогда можно будет задавать результат вызова "форма->ShowModal()"
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
10.08.2010, 22:09  [ТС] 9
Livito, ModalResult мы присваивали разные ненулевые значения.
Но форма изнутри все равно не клозится.
Видимо, всех тайн виндовских механизмов не знает и сам папаша Виндоус.
0
 Аватар для BRcr
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
26.12.2011, 21:45 10
Лучший ответ Сообщение было отмечено как решение

Решение

Только что столкнулся с такой же проблемой. Пришлось повозиться, но решение нашлось:dance3:
Можно в обработчике OnShow использовать функцию:
C++ Скопировано
1
PostMessage(this->Handle, WM_CLOSE,0,0);
- при этом форма моргает разок, но, по крайней мере, закрывается.
Только эти инструкции должны быть последними в своей цепочке логического ветвления алгоритма обработчика события, то бишь не предшествовать, по меньшей мере, функциям, вроде ShowMessage. Например, у меня так:
C++ Скопировано
1
2
3
4
5
    else {
        ShowMessage( "Broken link. Try again or... try something else ;)" );
        PostMessage(this->Handle, WM_CLOSE,0,0);
        return;
    }
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2011, 21:45
Помогаю со студенческими работами здесь

Закрыть главную форму
Есть 2 формы - Form1(главная), Form2. (создаются в AutoCreate). ПРи нажатии на кнопку на форме1, форма1 должна закрыться, а форма2...

Как закрыть форму
как зделать чтобы при нажатии на кнопку закрывалась программа(если конкретние то на Panel)

Как закрыть форму с клавиатуры
Может подскажите какрыть форму с клавиатуры. С главной формы запускаю форму TfrProsmLiz, нужно ее закрыть нажав на клавишу ESC. void...

Как закрыть форму с очисткой памяти?
У меня есть Form4. Там проходит тест. После того как тест пройден, например, эту форму закрыли. Затем из формы3 заново открыли форму4....

Вы уверены , что хотите закрыть форму?
Такое дело. Когда юзер скрывает форму (OnHide), нам нужно отобразить MessageBox с текстом "Уверены?" Ясно дело, что при...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025). (see screenshots to look at "Etalon" ARM)
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
CI/CD для приложений Java с Azure DevOps и Docker
Mr. Docker 14.03.2025
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/ CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких. . .
Разработка на PHP и интернет вещей (IoT)
Jason-Webb 14.03.2025
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,. . .
Node.js 20: Новые возможности и улучшения производительно­сти
Reangularity 14.03.2025
Что же принёс нам релиз Node. js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно. . .
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер