С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
☆ Форумчанин(FSC)☆
 Аватар для 2ima
911 / 292 / 27
Регистрация: 28.04.2013
Сообщений: 2,466
Записей в блоге: 10

При создании программы необходимо сделать чтобы вторая форма нормально закрывалась без первой

02.07.2013, 20:39. Показов 8061. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При создании программы появился вопрос:как сделать чтобы вторая форма нормально закрывалась без первой.
float password, us;
C++
1
2
password=1;
if(password==StrToFloat(Edit1->Text)){Form1->Show();Form2->Visible=false; ShowMessage(Спасибо, что зашли, "+Edit2->Text);}
Вопрос в том, что закрывая Form1 не закрывается Form2....

Добавлено через 34 минуты
Это правильная тема
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2013, 20:39
Ответы с готовыми решениями:

Сделать, чтобы при нажатии на форме 2 на кнопку, форма 2 закрывалась, а форма 1 открывалась
Здравствуйте подскажите как обнулить форму. Вобщем у меня форма form1 как бы с тестом там есть ComboBox при помощи которого выбирается тема...

Как правильно сделать чтобы вторая форма открывалась в первой
У меня есть главная форма и мне надо набить код чтобы когда я компилирую мне сперва вибивало форма з запросам фамилии и имя? Посмотрите как...

Как сделать, чтобы при нажатие на красный крестик форма не закрывалась?
Как сделать, чтобы при нажатие на красный крестик форма не закрывалась?

12
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
02.07.2013, 21:00
Form2->Close, если 2 не главная
0
☆ Форумчанин(FSC)☆
 Аватар для 2ima
911 / 292 / 27
Регистрация: 28.04.2013
Сообщений: 2,466
Записей в блоге: 10
03.07.2013, 12:06  [ТС]
НЕ,немного не то,надо чтоб форма 1 закрывалась и после этого вторая становилась главной!(Чтобы после ввода пароля 1 закрылась, а вторая осталась и закрывалась нормально(при простом закрытии второй ругается и не закрывает приложение)8)
Миниатюры
При создании  программы необходимо сделать чтобы вторая форма нормально закрывалась без первой  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
03.07.2013, 13:18
А зачем ты форму авторизации делаешь главной формой приложения (хотя бы даже и временно)? Это неправильный подход, не надо так делать. Форма авторизации должна создаваться еще до того, как вызывается Application->Initialize();

Подробнее: Display a LogIn / Password Dialog Before the Main Form is Created
(копия в Wayback Machine)
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
03.07.2013, 13:20
мне тоже надо такая фигня.пробовал разное, но не выходит
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
03.07.2013, 13:23
Плохо пробовал, значит. У меня выходит. А твоих попыток, чтобы посмотреть, где неправильно, я не вижу...
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
03.07.2013, 13:25
посмотрел вашу ссылку,но не очень понемаю, так как слабоват в английском.не могли бы вы обяснить, что за чем делать
0
 Аватар для dunmaksim
1 / 1 / 5
Регистрация: 24.04.2013
Сообщений: 45
03.07.2013, 13:37
Могу сказать, как я делал это в Delphi.
В настройках проекта делаешь главной формой приложения только свою Form2 (переименуй, имя не самое лучшее, лучше всего MainForm или типа того). Форму авторизации (Form1) помещаешь в список Avaliable Forms.
После этого прописываешь в файле запуска приложения примерно следующее (Delphi)
Delphi
1
2
3
4
5
6
with TForm1 do
if Execute then
    begin
      Application.CreateForm(Form1, TForm2);
      Application.Run;
    end;
При этом в классе TForm1 нужно определить публичный метод класса Execute:
Delphi
1
2
3
4
5
TForm1 = class (TForm)
...
public
    class function Execute(): Boolean;
...
В реализации которого надо написать:
Delphi
1
2
3
4
5
with TForm1.Create(nil) do
begin
    Result := ShowModal = mrOK; //Проверяем авторизацию
    Release; //То же самое, что Free, только для потомков класса TForm
end;
На обработчик кнопки OKBtn нужно повесить следующую процедуру:
Delphi
1
2
3
4
5
6
7
8
9
procedure OKBtnClick(Sender: TObject);
begin
    Login := LoginEdit.Text;
    Password := PassEdit.Text;
    if (Такие логин и пароль есть в базе и учетная запись не заблокирована) then
        ModalResult := mrOK;
    //Присваивать другое значение не надо - форма закроется и всё, 
    //а ведь надо выдать сообщение, что авторизация не удалась, но это уже сам
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
03.07.2013, 13:54
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от mish_k98 Посмотреть сообщение
не могли бы вы обяснить, что за чем делать
Собственно форма авторизации:

header
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class TForm2 : public TForm
{
__published:    // IDE-managed Components
    TButton *btnOk;
    TButton *btnCancel;
    TEdit *Edit1;
    void __fastcall btnOkClick(TObject *Sender);
    void __fastcall btnCancelClick(TObject *Sender);
private:
public:
    __fastcall TForm2(TComponent* Owner);
    static bool __fastcall Execute();
};
CPP
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
 
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
 
void __fastcall TForm2::btnOkClick(TObject *Sender)
{
    // Я сделал так, для теста, добавь сюда проверку пароля
    ModalResult = mrOk;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::btnCancelClick(TObject *Sender)
{
    ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
 
bool __fastcall TForm2::Execute()
{
    bool Result;
    TForm2 *LoginForm = new TForm2(NULL);
    try
    {
        Result = (LoginForm->ShowModal() == mrOk);
    }
    __finally
    {
        delete LoginForm;
    }
    return Result;
}


Файл проекта (Project->View source), добавляешь вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <vcl.h>
#pragma hdrstop
 
#include <tchar.h>
#include "Unit2.h" // Подключаешь header формы авторизации
 
USEFORM("Unit1.cpp", Form1);
 
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        if(TForm2::Execute()) // <--- Именно вот эту строку
        {
            Application->Initialize();
            Application->MainFormOnTaskBar = true;
            Application->CreateForm(__classid(TForm1), &Form1);
            Application->Run();
        }
        else
        {
            Application->MessageBox(L"Incorrect Password", L"Error"); // Реагируем на неверную авторизацию
        }
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
5
☆ Форумчанин(FSC)☆
 Аватар для 2ima
911 / 292 / 27
Регистрация: 28.04.2013
Сообщений: 2,466
Записей в блоге: 10
03.07.2013, 16:28  [ТС]
Щас разберусь и расскажу на С++)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,892
Записей в блоге: 12
03.07.2013, 19:19
Цитата Сообщение от FSC Посмотреть сообщение
Щас разберусь и расскажу на С++)
А предыдущее сообщение читать не пробовал? Оно что, на Бейсике написано?
1
☆ Форумчанин(FSC)☆
 Аватар для 2ima
911 / 292 / 27
Регистрация: 28.04.2013
Сообщений: 2,466
Записей в блоге: 10
04.07.2013, 11:00  [ТС]
Я просто тогда еще не увидел=)
0
1 / 1 / 0
Регистрация: 28.02.2014
Сообщений: 8
26.08.2021, 05:27
C++
1
2
3
4
5
6
7
8
try
    {
        if(TForm2::Execute()) // <--- Именно вот эту строку
        {
            Application->Initialize();
            Application->MainFormOnTaskBar = true;
            Application->CreateForm(__classid(TForm1), &Form1);
            Application->Run();
... пробую этот код добавить в билдере - ругается на Execute()...
Как запустить форму с диалогом про пароль?

Добавлено через 1 час 31 минуту
... разобрался, в header забыл заглянуть, все работает, спасибо в любом случае - инфа пригодилась!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.08.2021, 05:27
Помогаю со студенческими работами здесь

Как сделать, чтобы дочерняя форма не закрывалась при выгрузке главной
Итак, за дедовский метод решения задачи прошу не пинать. Есть форма Form1, у которой настройки пользователь прописывает в дочерней форме...

Сделать так, чтобы при закрытии Form3, закрывалась и форма Form2
Есть 3 формы Из Form1 по кнопке вызывается Form2, из Form2 опять же по кнопке вызывается Form3. Как Сделать так, чтобы при закрытии ...

Как сделать чтобы при нажатии на кнопку в форме2 эта форма закрывалась и открывалась форма1(основная, т.к. на
Как сделать чтобы при нажатии на кнопку в форме2 эта форма закрывалась и открывалась форма1(основная, т.к. на ней у меня меню программы)

Как сделать чтобы открывалась вторая форма при удачной авторизации
Программа имеет вот такой код: Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) End...

Как сделать чтобы форма закрывалась, а не сворачивалась
Вот код: Form2.Show; Form3.Hide; когда делаю Form2.Show; Form3.Close; , то 2 форма просто не успевает открыться.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru