Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.20;
Скачать: CL | DM;

Вниз

MDI форма   Найти похожие ветки 

 
GSVSerg ©   (2003-11-10 18:24) [0]

Доброго времени суток! Проблема в следующем. Есть MDI приложение. Из некоторой Mdichild-формы, открывается следующая Mdichild-форма, из нее еще одна и т.п. При закрытиии первой формы у остальных не срабатывает OnClose. Что можно сделать чтобы OnClose срабатывал? Заранее благодарю.


 
Silver Alex ©   (2003-11-10 18:30) [1]

пришли код, как там все открывается и закрывается, и в чем именно проблема, что значит "не срабатывает OnClose".


 
gsvserg ©   (2003-11-10 18:38) [2]

Mdichild"ы создаются

procedure TFpost_perelikorg.DBGrid1DblClick(Sender: TObject);
begin
parametr:=0;
f_postorg:=tf_postorg.Create(self);
end;

На закрытии

action:=free;


На OnClose одной из форм происходит проверка изменялись ли данные, и если изменялись, то делаю сохранение


 
Игорь Шевченко ©   (2003-11-10 18:44) [3]

Вообще-то не дело так MDI-формы создавать...
А созданные формы закрываются при закрытии первой ?


 
Silver Alex ©   (2003-11-10 18:46) [4]

ну, во первых


>
> procedure TFpost_perelikorg.DBGrid1DblClick(Sender: TObject);
> begin
> parametr:=0;
> f_postorg:=tf_postorg.Create(self);
> end;


если это из MDI формы, тогда может и не Self, лучше уж nil или Application
а на закрытие что-то не понятно, наверное все таки

Action:=caFree;

да, и что просто не заходит в оброботчик OnClose ?или что?
и что значит
> На OnClose одной из форм ...


а на других то он есть , оброботчик этот?


 
gsvserg ©   (2003-11-10 18:50) [5]

Игорь Шевченко © (10.11.03 18:44) [3]
Да, все закрываются

Silver Alex © (10.11.03 18:46) [4]

только у одной формы(пока у одной) нужно обрабатывать OnClose
Первая форма - список объектов, во второй(открывается из первой) эти обекты редактируются, в ней и нужно при закрытии спрашивать пользователя сохранять или нет.


 
gsvserg ©   (2003-11-10 19:02) [6]

>>если это из MDI формы, тогда может и не Self, лучше уж nil или Application

Если создавать с помощью nil или application, то вторая форма не закрывается при закрытии первой, а нужно чтобы закрывалась.
А можно как-то узнать при закрытии первой формы открыта ли вторая?


 
Silver Alex ©   (2003-11-10 19:02) [7]

а зачем форма редактирования MDI, вызывай ее просто модально.По крайней мере я так делаю,но даже если так как ,ты, делаешь. Все равно не пойму ..
оброботчик есть, ты закрываешь форму методом Close ? и не попадаешь в этот обработчик?так?


 
gsvserg ©   (2003-11-10 19:06) [8]

Первую форму закрываю form1.close и если вторая создана так form2:=tform2.create(self), то она закрывается тоже и OnClose не срабатывает.


 
Silver Alex ©   (2003-11-10 19:12) [9]

ага, теперь более понятно, так это же совсем другой компот :))
ну как варианты я уже предложил вызывать форму редактирования модально, но если все равно тебе надо именно так как уже есть, ну делай принудительно в OnClose первой формы типа

form2.close;

но это как-то коряво выглядит , но должно работать


 
gsvserg ©   (2003-11-10 19:17) [10]

Silver Alex © (10.11.03 19:12) [9]

А если form2 не открывалась?
Тогда ошибка.


 
Плохиш_   (2003-11-10 19:27) [11]

>gsvserg © (10.11.03 19:06) [8]

используй OnCloseQuery


 
Silver Alex ©   (2003-11-10 19:35) [12]

ну ,ты, даешь ,блин :))
тогда так

на оброботчик OnClose первой формы дописуешь
так

begin
if assigned(form2) then
form2.close;
form2:=nil;
...
end;

что-то типа этого


 
Игорь Шевченко ©   (2003-11-10 20:32) [13]

MDI-формы (да и любые формы, созданные таким образом) получать события OnClose не будут. Почему - см. Forms.pas в VCL

Как один из выходов, рекомендую попробовать обрабатывать события OnDestroy..
А вообще-то надо архитектуру приложения пересматривать...Либо не создавать так формы, либо не полагаться на событие OnClose


 
Silver Alex ©   (2003-11-11 09:20) [14]


> Игорь Шевченко

ну надо ему именно так, понимаешь :))


 
gsvserg ©   (2003-11-11 10:38) [15]

Silver Alex © (10.11.03 19:35) [12]
assigned(form2) - всегда true


 
gsvserg ©   (2003-11-11 11:22) [16]

gsvserg © (11.11.03 10:38) [15]
притормозил ... :())))
всем спасибо! все работает


 
Silver Alex ©   (2003-11-11 11:56) [17]

ну наконец-то :))



Страницы: 1 вся ветка

Текущий архив: 2003.11.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
7-66136
Ig
2003-09-13 14:17
2003.11.20
Bios


3-65755
chtr
2003-10-31 11:04
2003.11.20
Rave reports - две колонки.


3-65725
Murder
2003-11-03 13:25
2003.11.20
Работа с Excel


14-66086
Mike Kouzmine
2003-10-15 17:08
2003.11.20
---|Ветка была без названия|---


3-65729
dimablind
2003-10-31 23:31
2003.11.20
dBGrid