Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
ВнизЗакрытие формы в её FormActivate Найти похожие ветки
← →
Не знающий (2003-07-09 23:53) [0]Есть две формы. На превой форме лежит баттон, по нажатию на который открывается вторая форма.
procedure TForm1.Button1Click(Sender:TObject);
begin
ShowMessage("1");
Form2.ShowModal;
ShowMessage("2");
end;
procedure TForm2.OnActivate(Sender:TObject);
begin
{Чего-то делается}
{................}
Form2.Close;
end;
После нажатия на баттон получаю сообщ 1 и открывается вторая форма. После того как чего-то во второй форме выполняется выскакивает сообщение 2, но форма остаётся на экране, т.е. во второй форме всё проходит успешно, управление передаётся в форму 1. Почему так происходит (вторая форма не закрывается)?
← →
Marat (2003-07-10 01:27) [1]Дело в том, что у неглавных форм вызов метода Close не
приводит к закрытию (уничтожению) формы, как это происходит
при вызове Close главной формы. У второй формы это равносильно
вызову метода Hide, т.е. она просто "прячется", но не
уничтожается. А события типа OnActivate,OnCreate,OnShow и т.д.
не позволяют менять свойство Visible (что и происходит при
вызове Close второй формы). Если бы ты вместо Form2.ShowModal
написал просто Form2.Show, то у тебя вообще бы исключение
выскочило.В данном случае вместо OnActivate засунь весь код в
OnPaint и всё будет работать нормально.
← →
Германн (2003-07-10 01:55) [2]Еще один вариант - заменить "прямое" закрытие на "отложенное". Т.е. вместо
Form2.Close;
поставить
PostMessage(Handle,WM_Close,0,0);
при необходимости добавив Exit сразу после PostMessage;
← →
Skier (2003-07-10 08:52) [3]>Не знающий (09.07.03 23:53)
Мне кажется в твоей программе неправильная логика.
И OnActivate тут ни при чём.
Дело в том что Form2.ShowModal это функция .
Попробуй это использовать...
← →
ЮЮ (2003-07-10 09:11) [4]и модальная форма "изнутри" должна закрывается ModalResult := mrXXX, а не Close
← →
Дин Каа (2003-07-10 12:04) [5]Кстати в хелпушнике на ShowModal очень подходящий пример есть.
Как раз такой случай
← →
Не знающий (2003-07-10 19:02) [6]OK. Спасибо
← →
FoxBox (2003-07-14 09:22) [7]Как вариант, по условию в onActivate
запускай таймер, если надо закрыть окно.
Timer1.Enabled := true;
а в таймере напиши:
Timer1.Enabled := false; // от греха подальше, достаточно одного вызова
Close;
Проблема решится...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c