Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249

Формы в проекте

03.03.2024, 02:12. Показов 2256. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не первый мой проект, но проблемы такой не было.
В проекте 4 формы: первая, но не главная, из которой можно открыть 3 остальных. С двумя все нормально, но с третьей проблема, и не в самой форме, она открывается, а в переменной, значение который нужно передать из первой формы.
На первой форме:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int table;
__fastcall TTable_Form::TTable_Form(TComponent* Owner) : TForm(Owner)
{
    table = -1;
}
void __fastcall TTable_Form::SpeedButton_Table_9Click(TObject* Sender)
{
     table = 9;
    if (table == 9) {
      Game_Form->Show();
    }
}
На форме которая открывается:
C++
1
2
3
4
5
6
7
8
9
extern int table;
__fastcall TGame_Form::TGame_Form(TComponent* Owner) : TForm(Owner)
{
Label1->Caption = table;  // -1
switch (table) {
        case 9:
..........................
}
}
Значение table остается -1, вернее при нажатии на кнопку первой формы она принимает 9, т.к. нужная форма открывается, но потом в новой форме снова принимает -1.
В чем дело?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2024, 02:12
Ответы с готовыми решениями:

Не открываются формы в проекте
Я написал программу и базу затем переустановил MS SQL и теперь у меня получается открыть только проект. Мне же нужно открыть dm, чтобы...

Две формы в проекте
У меня в проекте 2 формы, подскажите пожалуйста, как можно скрыть первую форму и показать вторую, и наоборот.

Две формы в одном проекте
Добрый день! Имеется проект Windows Forms. На скриншоте код основной формы файла MyForm.cpp,а у второй пока ничего нет. ...

13
 Аватар для NT SERVICE
122 / 120 / 41
Регистрация: 27.01.2013
Сообщений: 546
03.03.2024, 10:57
Лучший ответ Сообщение было отмечено Belju как решение

Решение

Все правильно, в конструкторе она всегда будет -1.
Проверяй в OnShow().
1
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
03.03.2024, 15:13  [ТС]
NT SERVICE, и как это выглядит? я не в курсе

Добавлено через 13 минут
NT SERVICE, уже понял, спасибо за совет... но есть другой вопрос: как сделать что бы первая форма закрылась при открытии новой формы? просто Close() закрывается и новая форма
0
 Аватар для NT SERVICE
122 / 120 / 41
Регистрация: 27.01.2013
Сообщений: 546
03.03.2024, 15:53
Не совсем понимаю что нужно, может так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TForm1 *Form1;
TForm * OldForm = NULL;
 
...
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Form2->Show();
}
//---------------------------------------------------------------------------
 
...
TForm2 *Form2;
 
extern TForm * OldForm;
 
void __fastcall TForm2::FormShow(TObject *Sender)
{
   if (OldForm && OldForm->Showing) OldForm->Hide();
   OldForm = this;
}
В третьей, так-же как во второй.
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
03.03.2024, 17:33
Просматривается несколько вариантов...

Вариант 1, возможный, но, ИМХО, в корне неправильный:
а) Объявить переменную table в разделе public класса формы TTable_Form
б) Обращаться в методах формы TGame_Form как к полю класса формы TTable_Form
C++
1
Label1->Caption = Table_Form->table;
Вариант 2, получше, но тоже так себе:
а) Объявить переменную table в разделе public класса формы TGame_Form
б) Присваивать значение этой переменной перед вызовом этой формы
C++
1
2
3
4
5
void __fastcall TTable_Form::SpeedButton_Table_9Click(TObject* Sender)
{
     Game_Form->table = 9;
     Game_Form->Show();
}
Вариант 3: Переопределить конструктор подчиненной формы и передавать туда значение переменной table в качестве параметра. Но для этого надо и саму подчиненную форму создавать динамически.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.03.2024, 15:48  [ТС]
NT SERVICE, ничего не изменилось, по прежнему первая форма остается, но если просто в OnShow прописать Form1->Hide(); то оно скрывается... впрочем не знаю можно ли так делать

D1973, нужно ли менять если работает как задумывалось через OnShow()? эта переменная используется лишь 1 раз при запуске программы
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
05.03.2024, 18:20
Цитата Сообщение от Belju Посмотреть сообщение
нужно ли менять
дело-то хозяйское...
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.03.2024, 20:55  [ТС]
Проявилась проблема. Вторая форма открывается из первой, и во второй форме в функции OnShow() Form1->Hide(); первая форма скрывается. При закрытии второй формы, это выход из программы, закрываются 2 формы
C++
1
2
Form2->Close();
Form1->Close();
Но почему то это не всегда срабатывает, примерно 1 раз из пяти-восьми остается незакрытой, вероятно, Form1, компилятор пишет ошибку: [ilink64 Error] Fatal: Could not open .\Win64\Release\Main.exe (program still running?), приходится удалять из диспетчера.
Как исправить?
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
06.03.2024, 05:44
Цитата Сообщение от Belju Посмотреть сообщение
Как исправить?
Я бы, конечно, пересмотрел интерфейс в пользу одной формы с кучей вкладок. А все вот это вот суходрочие (уж простите мне мой хранцузский) в виде скрытия главной формы при показе одной из 100500 подчиненных - это потенциальная утечка памяти и зависание приложения в процессах при каком-нибудь нештатном закрытии приложения, следовательно - на помойку.
Но
Цитата Сообщение от Belju Посмотреть сообщение
нужно ли менять если работает как задумывалось через OnShow()
правда???
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.03.2024, 13:24  [ТС]
D1973, в предыдущей версии проекта у меня было одно окно, вернее было два проекта по одному окну в каждом. Для удобства решил объединить их в один проект, тоже с одним окном, для этого потребовалось предварительное окно для выбора какой вариант окна открывать. И по вашей же подсказке оно было создано и все работало.
== Belju, Что Вы мутите, заставку? Или окно регистрации? Сюда смотрите.==
Неудобство было в том что на одном окне куча элементов, которые в буилдере перекрывают друг друга, а в приложении, в разных вариантах открытия, ненужные элементы просто скрывались. Мне показался некрасивым такой вариант, и решил создать новую версию проекта с разными окнами, что в общем то и получилось, если не считать что не всегда приложение полностью закрывается, зато все выглядит красиво и удобно.
0
06.03.2024, 13:33

Не по теме:

Я, может и старомоден, но при оконном программировании считал (и считаю), что должно быть основное окно программы, откуда вызываются диалоги настроек или вспомогательные окна для каких-либо разовых действий (форма регистрации, сплэш-окно, окно прогресса и т.п.). Но плодить кучу окон с запутанными связями и передачей данных между собой - моветон.

0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.03.2024, 13:51  [ТС]
И еще в предыдущем варианте я не смог добавить в первоначальное окно переход в окно инициализации, настроек, файла ini, в новом же варианте без проблем

Добавлено через 15 минут
TrollHammer, никакой запутанности нет. Из первоначального окна открывается:
1-окно настроек, открыл-закрыл
2-окно Grid DB, открыл-закрыл
в этих случаях первоначальное окно закрывать не обязательно
3-основное окно, открыл-закрыл-вышел из приложения
здесь первоначальное окно желательно скрыть или свернуть
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
06.03.2024, 14:01
Если я не ошибаюсь, алгоритм работы с формами такой:
Цитата Сообщение от Belju Посмотреть сообщение
1-окно настроек, открыл-закрыл - я так понимаю, что здесь выбирается пользователь и в основное тело программы передаются настройки пользователя из п.п. 2?
2-окно Grid DB, открыл-закрыл - если это так, то весь выбор можно совместить в одном окне инициализации
в этих случаях первоначальное окно закрывать не обязательно
3-основное окно, открыл-закрыл-вышел из приложения
здесь первоначальное окно желательно скрыть или свернуть
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.03.2024, 15:47  [ТС]
TrollHammer, не совсем так, пользователь не выбирается, он один, настройки задаются при первом запуске
и изменяются в редких случаях, передаются в основное окно
окно Grid DB тоже не всегда открывается, служит для проверки, свои настройки
из настроек для окна 2 и 3 только общий путь к БД

Добавлено через 1 час 30 минут
уточню:
- ....настройки задаются при первом запуске или считываются из готового файла ini
- ....служит для проверки или обновления БД при изменении структуры БД, что иногда делаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2024, 15:47
Помогаю со студенческими работами здесь

Поиски пропавшей формы в проекте
Net beans IDE 8.0.2 Проблема такая. Хотел изменить лейбел "Время инцидента" в программе и убрать в форме поле ID что бы в самой...

Фильтрация формы в проекте .adp
После экспорта формы из mdb в adp перестал работать фильтр формы по дате. Ошибку выдает 'Введенное значение не подходит для данного...

Создание формы в DLL-проекте
Такой вопрос: можно-ли в проекте библитеки DLL создавать формы, с кнопками, и прочими компонентами полноценной формы, которые будет...

Создание второй формы в проекте
Доброго дня. Не могу разобраться, как в Pascal ABC сделать вторую форму, которая появляется при клике на кнопку в первой форме, содержит в...

Как перебрать все формы в проекте?
Как перебрать все формы в проекте? При этом получать их имена...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru