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

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

02.07.2013, 20:39. Показов 8065. Ответов 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru