Form2 = new TForm2(this);
Form2->ShowModal();
Form1->Visible = false;
//bla bla bla
Form1->Visible = true;
Form2->Close();
delete Form2;
помогите с формами
открываю форму так
Form2 = new TForm2(this);
Form2->ShowModal();
Form2->Free();
далее выпонил действия со 2 формой, затем необходимо ее закрыть
закрываю так
delete Form2;
в результате форма 2 закрывается а 1 форма становится не активной. и вообще закрыть прогу можно только через диспечер задач.
Что не правильно, как правильно переходить с одной формы на другую?
и как можно сделать чтобы при переходе на 2 форму 1 закрывалась.
зарание спосибо.
Код:
только строчки надо некоторые поменять и а некторые убрать
Form1->Visible = false;
Form2 = new TForm2(this);
Form2->ShowModal();
//bla bla bla
Form1->Visible = true;
//Form2->Close(); если оставить эту то вылетает с ошибкой.
delete Form2;
и еще вопрос значит сделал так перешол с 1 формы на 2, далее с 2 на 1, потом опять с 1 на 2, далее пытаюсь перейти с 2 на 1 выдает ошибку:
Project Project raised exception class EAbstractError with message 'AbstractError'. Process stoped/ use Stop or Run to continue.
что это за ошибка ?
Код:
void TForm1::Button1Click ()
{
// В качестве владельца формы пользуем объект "Приложение"
if (Form2 == NULL)
Form2 = new TForm2 (Application);
// Открываем форму2 в модальном режиме - чтение результата при надобности
TModalResult Res = Form2->ShowModal();
// Удаляем Form2, обнуляем указатель.
delete Form2; Form2 = NULL;
// Следующий код не обязателен - по желанию, но через this, а не Form1
this->Show ();
this->SetFocus ();
}
{
// В качестве владельца формы пользуем объект "Приложение"
if (Form2 == NULL)
Form2 = new TForm2 (Application);
// Открываем форму2 в модальном режиме - чтение результата при надобности
TModalResult Res = Form2->ShowModal();
// Удаляем Form2, обнуляем указатель.
delete Form2; Form2 = NULL;
// Следующий код не обязателен - по желанию, но через this, а не Form1
this->Show ();
this->SetFocus ();
}
сделал теперь через приложение. теперь вылетает с тоже ошибкой но у же на 1 круге.
если делать не через приложение
и создавать проверку if (Form2 == NULL) при открытии, и писать Form2 = NULL при закрытии на 1 круге вылетает с той же ошибкой.
А вообще, какая нужда создавать форму вручную?
Проще указать для неё автоматическое создание, и просто вызывать через ShowModal - расходы памяти на хранение формы будут несравненно меньше, чем создание/удаление по десять раз на дню :D
теперь вот
[C++ Ошибка] Unit2.cpp(50): E2459 VCL style classes must be constructed using operator new
[QUOTE=el scorpio]Проще указать для неё автоматическое создание, и просто вызывать через ShowModal [/QUOTE]
можно поподробнее, и если можно пример. Что значит автоматичесое создание? я до этого тоже ведь через ShowModal() делал
что это за ошибка ?[/QUOTE]
[quote=Где-то глубоко в инете =)]
Описание
Исключение класса EAbstractError генерируется во время выполнения при попытке вызвать абстрактный метод. В процессе проектирования это исключение генерируется при размещении на форме компонента с абстрактным методом.
Абстрактный метод, объявляемый директивой abstract должен быть перегружен в производных классах прежде, чем создается экземпляр объекта.
Все свойства и методы исключения EAbstractError наследуются от базового класса Exception.
[/quote]
посмотри сам что там является абстрактным методом... :)
[C++ Ошибка] Unit2.cpp(50): E2459 VCL style classes must be constructed using operator new
можно поподробнее, и если можно пример. Что значит автоматичесое создание? я до этого тоже ведь через ShowModal() делал[/QUOTE]
1. Прошу прощения за опечатку, Form2 должно быть указателем
"TForm2 *Form2 = NULL;" - достаточно просто изменить уже существующую строку в начале файла Unit2.cpp
2. В параметрах проекта ("Project\Options") есть вкладка "Формы" с двумя списками: "Создаваемые формы" и "Доступные формы".
Первый список - это формы, которые создание которых производится в файле "Имя_Проекта.cpp" - данный год генерируется автоматичеки
Если форма находится в этом списке, то она будет создана методом CreateForm объекта "Приложение". Удаление формы также будет выполнено при завершении приложения.
Код:
WinMain (Параметры_Запуска_Приложения)
{[INDENT]try
{[INDENT]Application->Initialise();
Application->CreateForm (TForm1, &Form1);
Application->Run();
[/INDENT]}
catch (Exception &Error)
{
// Выдача сообщения об ошибке запуска программы
}
return 0; [/INDENT]}
{[INDENT]try
{[INDENT]Application->Initialise();
Application->CreateForm (TForm1, &Form1);
Application->Run();
[/INDENT]}
catch (Exception &Error)
{
// Выдача сообщения об ошибке запуска программы
}
return 0; [/INDENT]}
Формы, перечисленные во втором списке, приходится создавать и удалять вручную, через new/delete.
Посему проще сделать автоматическое создание формы, и не заморачиваться, а открывать уже созданное окно при необходимости.