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

Вниз

Мастера помогите советом!( AbstractError)   Найти похожие ветки 

 
Древолаз   (2006-02-15 10:18) [0]

Есть две формы мне нужно сделать переход с одной формы на другую, при этом чтоб формы выгружались с памяти.

Делаю так.
unit Unit1;
…………
procedure TForm1.Button2Click(Sender: TObject); // Переход на форму 2
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
Form1.Free;
end;

procedure TForm1.Button1Click(Sender: TObject); // Закрываем прогу
begin
Application.CreateForm(TForm2, Form2);
Form1.Close;
end;

end.

unit Unit2;
……
procedure TForm2.Button1Click(Sender: TObject); // Закрываем прогу
begin
Application.CreateForm(TForm1, Form1);
Form1.Close;
end;

procedure TForm2.Button2Click(Sender: TObject); // Переход на форму 1
begin
Application.CreateForm(TForm1, Form1);
Form1.Show;
Form2.Free;
end;

end.

Прога работает примерно раз 15 (переходим с первой формы на вторую) а потом вывешивает окно -
“Project Project1.exe raised exception class EAbstractError with message <Abstract Error>.Process stopped.Use Step or Run continue.”

Подскажите плиз где косяк?
С уважением Константин.


 
Гаврила ©   (2006-02-15 10:31) [1]


> Подскажите плиз где косяк?



> procedure TForm1.Button2Click(Sender: TObject); //
>Переход на форму 2
>begin
>Application.CreateForm(TForm2, Form2);
>Form2.Show;
>Form1.Free;
> end;


Не разрушай себя с своем же методе так.


 
Древолаз   (2006-02-15 10:39) [2]

А как коректно? (спасибо что откликнулся)


 
Dmitrij_K   (2006-02-15 10:42) [3]

Вместо Free напиши Release


 
Древолаз   (2006-02-15 10:45) [4]

Спасибо Dmitrij_K ! (сегодня проверю)


 
Жуков Олег   (2006-02-15 10:46) [5]

Ошибка в том, что из метода самого объекта нельзя вызвать его же деструктор, т.к. на момент окончания работы метода происходит обращение к объекту и объект ещё должен существовать. T.e. в методе TForm2.AnyProc() нельзя написать  Self.Free(). Обычно, если есть такая задача, посылают какому другому то окну пользовательское сообщение (PostMessage), и, обрабатывая его, то окно разрушает объект. Однако с формами проще, поменяй Form.Free() на Form.Close(), и в обработчике OnClose напиши Action := caFree; Если ты вызовешь Close для главной формы, то закроется всё приложение, поэтому это должны быть не главные формы. Я бы сделал для этой программы отдельную невидимую главную форму.

Ещё рекомендую в методах классов форм не использовать глобальных переменных соответветсвующих экземплярам этого класса, (т.е. вместо Form2.Close писать либо Self.Close(), либо просто Close()). - это исключит ряд ошибок в дальнейшем, когда будешь создавать несколько форм одного класса.


 
Древолаз   (2006-02-15 10:51) [6]

Спасибо всем! о более подробном ответе я и не мечтал (респект Жукову Олегу).



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
2-1139976703
Триггер
2006-02-15 07:11
2006.03.05
Вопрос по SQL


1-1138640470
Igor23
2006-01-30 20:01
2006.03.05
Работа с COM объектами!!! Закладка DataSnap.....


2-1139737431
psa247
2006-02-12 12:43
2006.03.05
Убрать SmallImages у ListView


2-1140293509
49 Cent
2006-02-18 23:11
2006.03.05
Как перенсти данные из одного Adotable в другой Adotable?


1-1138981999
Apollon_604
2006-02-03 18:53
2006.03.05
C Object файлы