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

Вниз

Ошибка закрытия основной формы из другой...   Найти похожие ветки 

 
rra ©   (2006-05-25 11:04) [0]

Всем привет!
Есть 2 формы. В основной идет вызов 2-й модальной формы слудующим образом:

procedure TmForm.FormActivate(Sender: TObject);
 begin
   fmUserSelect := TfmUserSelect.Create(self);
   fmUserSelect.ShowModal;
   fmUserSelect.Free;
 end;


Во 2 форме в обработчике нажатия кнопки идет проверка каких-то условий и в случае невыполнения - полностью выход из программы:

procedure TfmUserSelect.Button_OkClick(Sender: TObject);
 begin
   ...
     if ...
       then ...
          else
            begin
              fmUserSelect.Close;
              mForm.Close;
            end;
 end;


Так вот при выполнении закрытия основной формы выдает ошибку: "Cannot change Visible in OnShow or OnHide" и в отладчике выделяется строка: fmUserSelect.Free; из
procedure TmForm.FormActivate
Не могу понять, почему? Такая конструкция у меня используется в нескольких программах и работает нормально. Что не так, подмогните, плз!


 
Сергей М. ©   (2006-05-25 11:11) [1]

procedure TfmUserSelect.Button_OkClick(Sender: TObject);
begin
  ...
    if ...
      then ...
         else
           begin
             Close;
             Application.Terminate;
           end;
end;


 
rra ©   (2006-05-25 11:15) [2]

Спасибо...жестко, но действенно)...


 
Desdechado ©   (2006-05-25 11:34) [3]

Совсем не понимаю, зачем при получении фокуса первой формой поверх нее вдруг должна (еще и модально!) выдрыгиваться другая форма.
А ошибка происходит из-за твоего непонимания событийной природы винды.
Когда ты закрываешь вторую форму управление должно передаваться на fmUserSelect.Free, но при этом у тебя происходит попытка закрытия первой формы одновременно.
Т.е., простыми словами, ты пытаешься показать форму 1 (обработчик FormActivate) и одновременно пытаешься ее зарыть (обработчик кнопки 2-й формы). В этом и конфликт.
Поменяй логику программы.
Например, закрывай 2-ю форму, возвращая ModalResult (например, mrCancel).  После чего if( fmUserSelect.ShowModal = mrCancel ) then Application.Terminate;



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

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

Наверх




Память: 0.47 MB
Время: 0.044 c
15-1147378024
Kerk
2006-05-12 00:07
2006.06.11
Сборная России U-17 в финале чемпионата Европы по футболу!


1-1146550657
ArchValentin
2006-05-02 10:17
2006.06.11
Проблемы со шрифтами в QuickReport


2-1148792000
brother
2006-05-28 08:53
2006.06.11
Линейное движение


15-1147868546
syte_ser78
2006-05-17 16:22
2006.06.11
зачем нужна клавиша scroll lock?


5-1133350415
Vitek
2005-11-30 14:33
2006.06.11
DLL и форма