Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
1

Перенос переменных.

14.06.2011, 21:36. Показов 2524. Ответов 19
Метки нет (Все метки)

Вопрос вообщем-то простой, но ответа на него я не нашёл: Как воспользоваться переменной во второй форме, если объявлена она была в первой, при этом ее значение должно сохраниться? Извините, если бестолково сформулировал
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2011, 21:36
Ответы с готовыми решениями:

Перенос переменных в Statistica
Как из результата Нелинейного оценивания(Nonlinear estimation) Рисунок 1, перенести переменные...

Перенос значения переменных
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Перенос переменных и массивов из *.cpp в *.h
Нужно построить график по полученному массиву (строю с помощью zedgraph). Как перенести эти данные...

Перенос значения переменных из php в html
День добрый! Я новичок в сетевых языках и решил разобраться с PHP. Собственно, у меня есть HTML...

19
LK
Заблокирован
15.06.2011, 00:15 2
объявить ее с extern ( extern int i; ), добавить в Unit1.cpp #include "Unit2.h"
1
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
15.06.2011, 02:15  [ТС] 3
Видимо, я не понял Вас, ибо ничего не получилось у меня Можно подробнее?
0
LK
Заблокирован
15.06.2011, 02:52 4
кабы знать, что делал, и что - не получилось, да знать бы тип переменной...
0
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
15.06.2011, 08:49  [ТС] 5
Имеется 5 юнитов и 3 переменные: int, bool и AnsiString. Проект является простым тестом с тремя вопросами, при правильном ответе на каждый из них переменная типа int должна увеличиваться на единицу, про неправильном - оставаться неизменной. В AnsiString записывается имя тестируемого (то, которое он введёт в Edit еще на первой форме), а bool будет обозначать пол (true - мужской, false - женский). Все переменные выводятся в Label находящийся на последней форме, открывающейся после ответа на все три вопроса.
0
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
15.06.2011, 09:02 6
Вот на последней форме и объявляешь свои переменные с extern.
Т.е.extern int a;
extern bool b;
extern AnsiString s;
Причем не обязательно включать заголовочные файлы .h
//a,b,s - это твои переменные с других форм.

-----------------------
Из книги А.Я. Архангельского:
Например, если в модуле Unit1 имеется объявление глобальной переменной
int a1 = 10;
то в модуле Unit2 вы можете использолвать эту переменную,
если запишите объявление(без инициализации)
extern int a1;
2
1089 / 587 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
15.06.2011, 09:29 7
зачем все усложнять?
например, в Form1 есть AnsiString ManName;
в Form2 пишем
C++
1
Label1->Caption = Form1->ManName;
что не так?
1
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
15.06.2011, 09:40 8
AntonChik, по моему это можно сделать, если ManName
принадлежит классу Form1,т.е. если AnsiString ManName; входит в описание класса Form1.

А вдруг у него глобальные переменные, не принадлежащие классу Form1.
2
1089 / 587 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
15.06.2011, 09:46 9
причем тут вдруг?
конкретно идет речь о переменных формы, а не о глобальных.
1
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
15.06.2011, 09:59 10
AntonChik, ну если так, то да.
Просто, я подумал, вдруг под словом форма он имел ввиду Unit.
Т.е. Как воспользоваться переменной во втором Unit'e, если объявлена она была в первом.
И думай, глобальные или класса.
2
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
15.06.2011, 12:47  [ТС] 11
Я-Лис, Вы правы, просто я коряво сформулировал вопрос

Всем спасибо!
0
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
17.06.2011, 01:48  [ТС] 12
Хех) Проблема решилась, да не совсем. Подскажите, почему голобальная переменная s (типа bool) не меняет своё значение после
C++
1
2
3
4
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
s = true;
}
?
По крайне мере в других Unit'ах она сохраняет своё значение по умолчанию (s = false).
(Extern'ы я записал в *.h и подключил его в Unit2.)
0
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
17.06.2011, 08:42 13
Цитата Сообщение от MatrixDeity Посмотреть сообщение
(Extern'ы я записал в *.h и подключил его в Unit2.)
Из книги Архангельского:
"Отметим еще одну особенность использования переменных, описанных в другом модуле.
Если объявить глобальную переменную А в заголовочном файле Unit1.h, и повторить
это объявление в модуле Unit2 с добавлением модификатора extern. То в этом случае
в модуль Unit2 нельзя вводить директиву include, подключающую файл Unit1.h.
Если ее ввести, то в модуле Unit2 возникнет копия переменной А, никак не связанная с переменной модуля Unit1, кроме начального значения, которое будет взято из объявления в файле Unit1.h.
В модулях Unit1 и Unit2 будут существовать две различные переменные с одним именем А.
Изменение одной из них никак не скажется на значении другой."

-----
Поэтому, если хочешь использовать глобальные переменные из Unit1,
объявляй их лучше в Unit1.cpp,а в Unit2 объявляешь с extern.
2
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
17.06.2011, 14:50  [ТС] 14
Я пробовал и такой вариант . Что у меня имеется на данный момент:
Unit1.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool s;
AnsiString n;
int p;
 
//Ещё какой-то код.
 
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
s = true;
}
Переменная s не поменяла значение.

Unit2.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit3.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
extern int p;
 
//Ещё какой-то код.
 
void __fastcall TForm2::Button2Click(TObject *Sender)
{
p++;
Form3->Show();
Form2->Hide();
}
Переменная p опять же, не меняет своё значение. По крайней мере в последующих Unit'ах она равна нулю.
0
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
17.06.2011, 15:09 15
Ну во-первых если ты s = true делаешь в RadioButton1Click,то
вроде же надо писать:
C++
1
2
if(RadioButton1->Checked)
    s = true;
----

а насчет p сейчас подумаю
1
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
17.06.2011, 15:13  [ТС] 16
Я-Лис, я делал по аналогии с другим моим "проектом" (как смешно применять этот термин относительно этого ужаса), в котором этот метод сработал . + я пробовал менять значение переменной при событии onShow - это сработало, но мне такой вариант не подходит.
0
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
17.06.2011, 15:20 17
MatrixDeity,
Цитата Сообщение от Я-Лис Посмотреть сообщение
if(RadioButton1->Checked)
s = true;
, помогло? А то я сам не знаю, так ли
----
А насчет p я не пойму, извини.
А где ты p инициализируешь?
0
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
17.06.2011, 15:29  [ТС] 18
Я-Лис, про RadioButton - нет, не помогло. Я уже такой вариант пробовал

Про инициализацию - в Unit1.cpp.
0
69 / 69 / 2
Регистрация: 10.05.2011
Сообщений: 173
17.06.2011, 16:08 19
Слушай, что-то я сам не пойму, такая же фигня. Как ты сказал onShow помогает, но только когда форма
первый раз появляется, не очень хороший вариант.
---
У меня только два варианта:
1) Либо делаешь как ты делал в onShow
2) либо ставишь на последней форме кнопку, например под названием "Вывести результат",
в ее обработчике выводишь свои результаты
например типа такого: Label1->Caption = p;
И когда будешь нажимать, результат будет нормально меняться.
-----
Сам не пойму почему так, как будто p++ "не срабатывает" когда ты нажимаешь на Button2Click.
Видимо надо как-то специально отдельно применять команду вывода результатов.
1
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
17.06.2011, 16:24  [ТС] 20
Я-Лис, сейчас попробую. Спасибо, ещё раз
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2011, 16:24

Перенос public переменных между формами
обьявил переменную типа string public string s; В одной форме присвоил ей значение! Как мне...

Перенос переменных из кода на python в код на С++
Объявил переменную а через PyRun_SimpleString(а=1) Как теперь сделать так, чтобы выводилось...

Переопределение типа и перенос методов и переменных в классах.
У меня есть класс MyPanel наследуемый от JPanel, в нем создается кнопка класс MyButton наследуемый...

Перенос значения переменных из второй формы в первую
Доброго времени суток! Появился такой вопрос: У меня есть 2 формы. В первой по нажатию кнопки...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.