Как закрыть форму c builder
Borland C++ Builder. (Embarcadero RAD Studio) Если да то читай ниже:
Как закрыть их обе? |
Закрыть приложение?
Application->Terminate();
form2 вызываю так: this->Visible = false; Form2^ f2 = gcnew Form2(); f2->ShowDialog(); |
Вау. Ты динамически создал вторую форму f2 по готовой форме Form2 .
В билдере делаешь активной первую форму:
File->Use Unit.
выбираешь вторую форму.
Делаешь активной вторую форму и добавляешь первую.
Потом на кнопке в первой форме:
Form1->Visible=false;
Form2->Visible=true;
Во второй форме наоборот:
Form2->Visible=false;
Form1->Visible=true;
P.S. Есть форум для соотв. компиляторов. Для WinAPI есть тоже свой раздел.
Пишу на чистом С, плюсы спилил.
Как закрыть форму c builder
Группа: Участник
Сообщений: 22
Здравствуйте! На сей раз, я столкнулся с такой проблемой: приложение состоит из двух форм — Form1 и Form2. Форма Form2 перенесена в список доступных форм и вызывается из Form1 так:
f2=new TForm2(Application);
if (!f2) return;
f2->Show();
На форме Form2 имеется кнопка, которая должна закрывать данную форму (не крестик в правом верхнем углу). Если закрывать форму Form2, нажимая на крестик, то все нормально, а при нажатии на кнопку я получаю исключение:
Access violation at address 401146B3 in module vcl60.bpl. Read of address 00C9CDD8. Кто знает, как «заставить» форму Form2 открываться нормально при нажатии кнопки. подскажите. Заранее благодарен
Отправлено: 05.02.2007, 13:37 |
Группа: Участник
Сообщений: 575
Отправлено: 05.02.2007, 13:52 |
Группа: Модератор
Сообщений: 1583
Отправлено: 05.02.2007, 13:57 |
Группа: Участник
Сообщений: 22
Переменная f2 объявлена в разделе public класса TForm1. Закрывавает форму Form2 функция, которая есть в cpp-файле формы Form1. Вот ее код:
Отправлено: 05.02.2007, 14:41 |
Группа: Участник
Сообщений: 575
Отправлено: 05.02.2007, 14:53 |
Группа: Участник
Сообщений: 22
Отправлено: 05.02.2007, 15:07 |
Группа: Модератор
Сообщений: 1583
Отправлено: 05.02.2007, 15:13 |
Группа: Участник
Сообщений: 22
Отправлено: 05.02.2007, 15:22 |
Группа: Модератор
Сообщений: 1583
Возможно это тот случай когда «сразу delete» делать нельзя. Но учтите, что при закрытии крестиком ( ) вы не освобождаете память если у вас не стоит caFree и, возможно, не очищаете указатель f2.
Отправлено: 05.02.2007, 15:59 |
Группа: Участник
Сообщений: 115
все просто.
в начале ты проверяешь не создана ли форма, создаешь если нет и показываешь ее
CODE |
if (Form2) Form2=new TForm2(Form1); > Form2.Show; |
вызывая delete Form2; ты освобождаешь память, НО
delete НЕ присваивает NULL переменной
а при закрытии формы не забудь!:
CODE |
void __fastcall TForm2::OnDestroy(TObject *Sender) Form2=NULL; // а попробуй еще вот так : // this=NULL; // помоему это более правильно. или нет? > |
CODE |
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) Action=caFree; > |
Отправлено: 05.02.2007, 16:10 |
Группа: Участник
Сообщений: 115
QUOTE |
Переменная f2 объявлена в разделе public класса TForm1. Закрывавает форму Form2 функция, которая есть в cpp-файле формы Form1. Вот ее код: |
определись ск-ко экземпляров TForm2 у тебя будет.
если 1 — — НЕ СОРИ!
ПЕРЕМЕННАЯ f2 — ЛИШНЯЯ.
в модуле Unit2.h (там где класс TForm2 объявлен) объявлена переменная Form2 — используй ее. а в Unit1.cpp вставь
#include «Unit2.h»
а призакрытии Form1 все прочие формы приложения (если не ошибаюсь) закрываются сами.
все прочее я написал выше.
Как закрыть форму
Как закрыть форму с клавиатуры
Может подскажите какрыть форму с клавиатуры. С главной формы запускаю форму TfrProsmLiz, нужно ее.
Как закрыть форму с очисткой памяти?
У меня есть Form4. Там проходит тест. После того как тест пройден, например, эту форму закрыли.
Закрыть форму и открыть форму
Как закрыть не главную форму и запустить заново с ее начальным состоянием. Поясню. В Form2 у.
Закрыть модальную форму
Столкнулся со следующей проблемой. У меня в проекте есть главная форма, с которой я по кнопке.
Как отключить кнопку закрытия [X] формы?
Чтобы сделать кнопку закрыть форму/программу достаточно прописать небольшой код. Так в FormCreate пропишите представленный ниже код:
HMENU MenuHandle = GetSystemMenu(Handle, false); if(MenuHandle) DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);
Поделиться
Подготовил материал
Табаков Юрий
Программист
Автор и редактор проекта CuBook.PRO. Главная задача, которую я ставлю перед собой – донести до начинающих программистов удобочитаемый материал. Буду рад выслушать замечания и предложения. Не забываем ставить оценки и делать репосты =)
Минутка юмора
Программисты — они как женщины: и без них жить нельзя и с ними иногда тошно.
Самое интересное
- Log – натуральный логарифм
- ShellExecute – открыть папку или приложение
- Pow – возведение числа в степени
- Chart – графики и диаграммы
- StringGrid – таблица строк и столбцов