Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизМастера помогите советом!( 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c