C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Область видимости переменных
farik
  Отправлено: 18.06.2005, 12:24


Не зарегистрирован







В форме Form2 задан массив int D[n] (в файле Unit2.h),
CODE

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
       TImage *Image1;
       TEdit *d0;
       TEdit *d1;
       TEdit *d2;
       TEdit *d3;
       TEdit *d4;
       TEdit *d5;
       TEdit *d6;
       TButton *Button1;
       TEdit *d7;
       TButton *Button2;
       void __fastcall Button1Click(TObject *Sender);
       void __fastcall d7Change(TObject *Sender);
       void __fastcall d6Change(TObject *Sender);
       void __fastcall d5Change(TObject *Sender);
       void __fastcall d4Change(TObject *Sender);
       void __fastcall d3Change(TObject *Sender);
       void __fastcall d1Change(TObject *Sender);
       void __fastcall d2Change(TObject *Sender);
       void __fastcall d0Change(TObject *Sender);
       void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
enum
{n=8};
int D[n];
bool isSet;

       __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif


из формы Form13 пытаюсь получить доступ к массиву:

Form2->D[0];

но в ответ 0
делаю Label1->Caption = IntToStr(Form2->D[0]);
на Label1 выводиться 0 (но это не совпадает с тем что в массиве).

Никаких ошибок не выдается.
,
хотя массив был до этого задан (числа там должны быть):
в Unit2.cpp в ф-ии обработчике события нажатия на кнопку ОК
CODE


D[0] = StrToInt(Form2->d0->Text);
D[1] = StrToInt(Form2->d1->Text);
D[2] = StrToInt(Form2->d2->Text);
D[3] = StrToInt(Form2->d3->Text);
D[4] = StrToInt(Form2->d4->Text);
D[5] = StrToInt(Form2->d5->Text);
D[6] = StrToInt(Form2->d6->Text);
D[7] = StrToInt(Form2->d7->Text);
Form2->Hide();

.

include "unit2.h" присутствует в unit13.cpp:
CODE

#include <vcl.h>
#pragma hdrstop

#include "Unit13.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm13 *Form13;
int x = 1, r = 2;
double d = 1;

//---------------------------------------------------------------------------
__fastcall TForm13::TForm13(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm13::FormCreate(TObject *Sender)
{
Label1->Caption=IntToStr(Form2->D[0]);

....

xTrim
Отправлено: 20.06.2005, 07:47


Машинист паровоза

Группа: Участник
Сообщений: 208



TForm13::FormCreate — происходит видимо при инициализации приложения когда Form2->D[0]==0. Попробуй сделать что-то типа:

Unit2.cpp
CODE

...
D[6] = StrToInt(Form2->d6->Text);
D[7] = StrToInt(Form2->d7->Text);
Form2->Hide();
Form13->UpdateNum();
...


Unit13.cpp
CODE

...
void TForm13::UpdateNum()
{
Label1->Caption=IntToStr(Form2->D[0]);
...


или в TForm13::OnShow.

Вернуться в Вопросы программирования в C++Builder