0 / 0 / 0
Регистрация: 04.11.2012
Сообщений: 13
1

Передача массивов из одной формы в другую

22.09.2013, 14:39. Показов 1578. Ответов 5
Метки нет (Все метки)

Собственно сама задача состоит в том, чтобы в одной форме рассчитать два массива значений, а затем полученный массив вывести в таблицу на вторую форму. На одной форме все отлично считает и выводит, а на второй форме выводит в таблицу нули вместо значений. Помогите разобраться.

Unit1.h
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
#include <math.h>
#include <Classes.hpp>
#include <Controls.hpp>
#include <Dialogs.hpp>
#include <Grids.hpp>
#include <Menus.hpp>
#include <StdCtrls.hpp>
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <Dialogs.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMainMenu *MainMenu1;
        TMenuItem *N1;
        TMenuItem *MenuExit;
        TMenuItem *MenuCalc;
        TMenuItem *MenuSave;
        TMenuItem *MenuView;
        TLabel *Label1;
        TLabel *Label2;
        TStringGrid *StringGrid1;
        TButton *Button1;
        void __fastcall MenuExitClick(TObject *Sender);
        void __fastcall MenuCalcClick(TObject *Sender);
        void __fastcall MenuViewClick(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
class DATA
{ public:
  float m[40];
  float l[40];
  float d,pi,dell,ls,lf;
  int ro;
  void calcul()
  { for(int i=0;i<40;i++)
    { l[i]=ls+dell*i;
    }
    for(int i=0;i<40;i++)
    { m[i]=l[i]*ro*pow(d,2)*pi/4;
    }
  }
};
static DATA data;
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.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
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
#include <math.h>
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{  data.d=0.01;
   data.dell=0.01;
   data.pi=3.14;
   data.ro=8000;
   data.ls=0.15;
   data.lf=0.55;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MenuExitClick(TObject *Sender)
{
  Form1->Close();      
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuCalcClick(TObject *Sender)
{ data.calcul();
  Label2->Caption="Расчет выполнен!";
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::MenuViewClick(TObject *Sender)
{
  Form2->Show();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  StringGrid1->Cells[0][0]="Длина";
  StringGrid1->Cells[0][1]="Масса";
  for(int i=1;i<40;i++)
  { StringGrid1->Cells[i][0]=data.l[i];
    StringGrid1->Cells[i][1]=data.m[i];
  }
}
//---------------------------------------------------------------------------
Unit2.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TStringGrid *StringGrid1;
private:    // User declarations
public:     // User declarations
        __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
Unit2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{  StringGrid1->Cells[0][0]="Длина вала";
   StringGrid1->Cells[1][0]="Масса вала";
   for(int i=1;i<40;i++)
   { StringGrid1->Cells[0][i]=data.l[i];
     StringGrid1->Cells[1][i]=data.m[i];
   }
}
//---------------------------------------------------------------------------
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2013, 14:39
Ответы с готовыми решениями:

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

Передача события из одной формы в другую
Каким образом можно передать событие из одной формы в другую (в Builder c++)

Передача переменной из одной формы в другую
Есть сервер-распределитель, на нем хранятся данные о серверах вычислителях (порт и IP), с &quot;Клиент&quot;...

Передача переменной из одной формы в другую
Передаю переменную из одной формы в другую через extern. Компилирует всё правильно, но при...

5
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
22.09.2013, 14:48 2
на форме2 вывод в стриггрид написан в консрукторе формы. на тот момент еще ничего не посчитано. вивод надо делать после того, как выполнится data.calcul();
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31154 / 20362 / 7929
Регистрация: 22.10.2011
Сообщений: 35,297
Записей в блоге: 6
22.09.2013, 14:54 3
static - это внутреннее связывание, тебе нужно внешнее: extern... Посмотри, как сделано с Form1, и сделай так же: в header-файле - только объявление:
C++
1
extern DATA data;
, а в одном из CPP-шников - уже собственно определение переменной:
C++
1
DATA data;
, линкер разберется...
1
0 / 0 / 0
Регистрация: 04.11.2012
Сообщений: 13
22.09.2013, 15:19  [ТС] 4
Цитата Сообщение от _Dimon_ Посмотреть сообщение
на форме2 вывод в стриггрид написан в консрукторе формы. на тот момент еще ничего не посчитано. вивод надо делать после того, как выполнится data.calcul();
и так пробовал, не катит.
Цитата Сообщение от UI Посмотреть сообщение
static - это внутреннее связывание, тебе нужно внешнее: external... Посмотри, как сделано с Form1, и сделай так же: в header-файле - только объявление:
extern DATA data;
, а в одном из CPP-шников - уже собственно определение переменной:
Код C++
1
DATA data;
, линкер разберется...
сейчас попробую)

Добавлено через 23 минуты
сработало после использования обоих советов) т.е. добавления расчета на вторую форму. только не понятно куда делись значения, посчитанные на первой форме?
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
22.09.2013, 15:28 5
Цитата Сообщение от lsd180 Посмотреть сообщение
только не понятно куда делись значения, посчитанные на первой форме?
никуда не делись, просто на момент создания второй формы их еще небыло. Заполняй значения из первой формы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  StringGrid1->Cells[0][0]="Длина";
  StringGrid1->Cells[0][1]="Масса";
  for(int i=1;i<40;i++)
  { StringGrid1->Cells[i][0]=data.l[i];
    StringGrid1->Cells[i][1]=data.m[i];
  }
 
  StringGrid2->Cells[0][0]="Длина";
  StringGrid2->Cells[0][1]="Масса";
  for(int i=1;i<40;i++)
  { StringGrid2->Cells[i][0]=data.l[i];
    StringGrid2->Cells[i][1]=data.m[i];
  }
 
}
Добавлено через 2 минуты
или в OnShow второй формы, если показуеш ее после вычислений
1
0 / 0 / 0
Регистрация: 04.11.2012
Сообщений: 13
22.09.2013, 15:33  [ТС] 6
аа, вот оно что) я просто только начал освоение Builder'a и ООП в целом) пока не в курсе механики и всех нюансов
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2013, 15:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Передача значений переменных из одной формы в другую
Извините, но я недавно начал осваивать Builder 5. Неодходимо передать значения 4-х переменный...

Передача массивов из одной формы в другую
Есть форма 1 и форма 2. Начнем с формы 2. Я хочу из формы 1, взять массивы, значения всякие ну и...

Передача массивов и параметров с одной функции в другую
Здравствуйте. Я пишу программу, она состоит из множества функций. И у меня возникло море вопросов....

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


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

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

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