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

Общая переменная для двух форм?

25.06.2009, 17:46. Показов 7045. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне требуется обработчиком события находящимся на Форме2 (кнопка)
записать значение в переменную находящуюся на Форме1! (переменная типа string, пойдет любая текстовая)

Как мне это реализовать?

ЗЫ: побывал так:
C++
1
2
3
4
5
6
7
8
//это Форма1
#include <cstring.h>   
#include "Unit1.h"
#include "Unit2.h"
...
TForm1 *Form1;  //это кусок билдеровского кода который там уже был :)
 
string s; //а вот собственно моя переменная
C++
1
2
//это форма 2 обработчик щелчка кнопки
s="строка";
билдеру что то не нравится ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2009, 17:46
Ответы с готовыми решениями:

extern vector — одна переменная для всех форм
Нужно сделать, чтобы вектор был доступен из 2 форм. Не компилится с ошибкой Unresolved external '_tovar_arr' referenced from \UNIT1.OBJ...

Общая переменная для двух потоков
Есть программа, в которой один поток генерирует переменную, а два других обрабатывают её. Как сделать эту переменную общей для всех...

Общая переменная для двух экземпляров класса
Здравствуйте. есть класс. создаю несколько экземпляров класса. как в описании класса создать для всех этих экземпляров общую переменную?...

16
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.06.2009, 18:02
сделай переменную членом класса нужной формы и укажи хидер этой формы во втором окне... после этого пиши, что тебе вздумается
1
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
25.06.2009, 20:09
C++
1
2
3
4
5
6
7
8
//это Форма1
#include <cstring.h>   
#include "Unit1.h"
#include "Unit2.h"
...
TForm1 *Form1;  //это кусок билдеровского кода который там уже был :)
 
AnsiString s;

//это форма 2 обработчик щелчка кнопки
#include "Unit1.h"
extern AnsiString s="строка";
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 06:04
Можно ли вывести все общие для нескольких форм переменные в отдельный модуль publicvar.h , подключив этот модуль ко всем формам проекта директивой #include?
Или дублирование переменных с префиксом extern в каждой из форм, кроме самой первой - это единственный выход?
Вариант в сообщении №2 этой темы мне кажется не очень удобным, так как придётся перед каждой совместно используемой переменной указывать из какого она класса (Form1->имя переменной).
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
04.05.2018, 09:42
Цитата Сообщение от jkrnd Посмотреть сообщение
дублирование переменных с префиксом extern в каждой из форм, кроме самой первой - это единственный выход?
если переменную нужно "экстернить" в нескольких местах, лучше сделать аналогично тому, как это сделано с указателями форм в билдере: переменная объявляется в юните (в cpp-файле). В h-файле пишется объявление с extern`ом и h-файл подключается везде, где должна быть видна переменная.

Добавлено через 3 минуты
Цитата Сообщение от jkrnd Посмотреть сообщение
Можно ли вывести все общие для нескольких форм переменные в отдельный модуль publicvar.h
только если объявление будет не в самом h-файле. Иначе получишь кучу переменных с одинаковыми именами.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 10:11
Lelik-pahan, просьба уточнить действия:
в Unit1.cpp (с него стартует приложение):
C++
1
2
3
4
5
6
7
8
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int *asdf;
int *qwer;
в Unit1.h:
C++
1
2
3
4
extern PACKAGE TForm1 *Form1;
// Глобальные переменные, используемые в других формах
extern PACKAGE int *asdf;
extern PACKAGE int *qwer;
Как использовать переменные asdf и qwer в Unit2, Unit3?

Добавлено через 10 минут
меня сбило
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
как это сделано с указателями форм в билдере
в cpp:
C++
1
2
int asdf;
int qwer;
в h:
C++
1
2
extern int asdf;
extern int qwer;
и в Unit1, Unit2:
C++
1
#include "Unit1.h"
можно ли переменные вынести в отдельный модуль (от всех форм, включая стартовую)?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.05.2018, 10:13
Я когда-то применил такой способ (так как вообще не очень люблю писать лишнее)...- для примера: в приложении использовались три формы; на каждой были кнопки вызова двух других форм, и использовалась одна строковая переменная.
Чтобы не оформлять доступ к этим переменным отдельно на каждой форме, я написал один файл - Others.h__
C++
1
2
3
4
5
6
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h" 
#ifndef stro
   #define stro "Первая строка";
#endif
и (-что предосудительно!!-) подкорректировал файл vlc.h в папке VCL платформы__
C++
1
2
3
4
5
6
7
8
9
10
11
/////////////////////////////////////////////////////////////////////////////////
// VCL.H - Borland C++ Builder pre-compiled header file
// $Revision:   1.12  $
// Copyright (c) 1997, 1999 Borland International
/////////////////////////////////////////////////////////////////////////////////
#ifndef VCL_H
#define VCL_H
 
#include <vcl0.h>
#include "Others.h"   //  добавлено (потом убирается)
#endif  // VCL_H
В результате переменную stro опознавали на всех трёх формах и сами эти формы вызывались без добавления строк #include в начале текста в *.cpp.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 10:32
Цитата Сообщение от nick42 Посмотреть сообщение
подкорректировал файл vlc.h в папке VCL платформы
на это я пойтить не могу! боязно
а если вынести строки с объявлениями переменных в отдельную пару файлов cpp и h?

Добавлено через 9 минут
Unit1.cpp:
C++
1
2
3
4
#include "PublicVar.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
PublicVar.cpp:
C++
1
2
3
4
#include "PublicVar.h"
// Переменные, используемые в других формах (модуль PublicVar.h) объявлены в заголовочном файле
int asdf;       // PublicVar.h:   extern int asdf;
int qwer;       // PublicVar.h:   extern int qwer;
PublicVar.h:
C++
1
2
extern int qwer;    
extern int asdf;
и перед каждым из трёх:
C++
1
#include "PublicVar.h"
по-моему это должно правильно работать
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.05.2018, 10:35
.. то ваши asdf и qwer будут уникальными для каждой формы плюс получите соотв. предупреждения
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,872
Записей в блоге: 12
04.05.2018, 11:06
Цитата Сообщение от nick42 Посмотреть сообщение
то ваши asdf и qwer будут уникальными для каждой формы
Это еще с чего? В форме ничего вообще не будет, кроме описания (declaration) с указанием extern для линкера, что переменную надо искать где-то в другом месте. И найдет их линкер именно в файле PublicVar.cpp. И вся работа будет именно с теми переменными, которые определены (defined) в PublicVar.cpp.

Цитата Сообщение от jkrnd Посмотреть сообщение
а если вынести строки с объявлениями переменных в отдельную пару файлов cpp и h?
Все время так делаю.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 11:16
nick42, я спорить не буду. прикрепляю работающий проект.
Вложения
Тип файла: rar Ver1.3.rar (13.9 Кб, 15 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.05.2018, 11:40
Я не сомневаюсь, что на 6-й версии всё работает. А вот при попытке запустить из-под BCB5 (no package & linking dynamic) вдруг выдаёт unresolved external на _asdf и _qwer при линковке.

Добавлено через 1 минуту
П.С. ну, это так..., к слову. Решение - надо понимать - правильное.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 11:46
nick42, Спасибо. Я обязательно это учту.

Добавлено через 1 минуту

Не по теме:

у меня стоит и 6-я версия и RAD XE-4, но почему-то тянет больше к 6-й:)

0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.05.2018, 11:59
Цитата Сообщение от jkrnd Посмотреть сообщение
у меня стоит и 6-я версия и RAD XE-4, но почему-то тянет больше к 6-й

Не по теме:

В присутствии уважаемого volvo

об этом нужно говорить шепотом... .
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
04.05.2018, 12:27

Не по теме:

я потихонечку



Добавлено через 12 минут
Наткнулся на непонятную проблему:
C++
1
String s;
в модуле Unit1.cpp - объявляется без проблем.
то же самое в отдельном подключаемом модуле PublicVar.cpp не проходит.
C int-овой переменной - всё нормально работает

Добавлено через 5 минут
ой, виноват
добавил
C++
1
#include <vcl.h>
в новый модуль - и всё заработало.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,872
Записей в блоге: 12
04.05.2018, 13:17
Цитата Сообщение от jkrnd Посмотреть сообщение
C++
1
#include <vcl.h>
Незачем совершенно тянуть весь vcl, достаточно было
C++
1
#include <System.hpp>
2
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
04.05.2018, 14:25
Цитата Сообщение от volvo Посмотреть сообщение
Незачем совершенно тянуть весь vcl, достаточно было
Вот что значит "Век живи-век учись". Спасибо, я про такое даже не догадывался!
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2018, 14:25
Помогаю со студенческими работами здесь

Общая переменная для фреймов
Стандартная ситуация - надо, чтобы в parente (который frameset) была некая переменная, доступная (и на чтение, и на запись) из всех его...

Общая переменная для всех производных классов
В основном абстрактном классе Class0, я создаю переменную: protected int variable = 0; В классе Сlass1, производным от Class0,...

Java общая переменная для нескольких потоков
Всем здравствуйте, вообщем у меня есть массив. Я его хочу расшарить между потоками. import java.lang.*; import java.util.*; import...

PHP общая переменная для всех или потоки?
Я понимаю, что такого скорее всего нет, но может я чего-то не знаю. Мне нужно как-то создать переменную в оперативной памяти (в отдельном...

Общая динамическая переменная для всех компонентов программы
Всем Привет! Есть небольшая проблема, есть XML файл в котором содержатся настройки подключения к базе данных (имя сервера, и каталог...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru