Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Не могу достать переменную из другой формы


Автор: Mpak 4.12.2006, 19:14
У меня есть Form1 и Form2

В Form1->Edit1->Text вводяться данные при нажатии на кнопку срабатывает функция
Form2->ShowModal()

В Form2 вот такой код:
Код

//---------------------------------------------------------------------------

#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)
{
Form2->Caption=Form1->Caption;
Form2->Label1->Caption="Текст: "+Form1->Edit1->Text;
}
//---------------------------------------------------------------------------


15 строчка срабатывает, а 16 нет....

Автор: Anikmar 4.12.2006, 19:21
А что пишет?

Автор: Rodman 4.12.2006, 19:23
Mpak, мне кажется она срабатывает...

Просто при выполненнии кода
Код

__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)


в Form1->Edit1->Text ничего не написано....

Автор: Mpak 4.12.2006, 19:37
Оно, что, сбрасываеся?


Anikmar , в том то и дело, оно ничего не пишет smile

Автор: Rodman 4.12.2006, 19:49
Mpak, в свойстве Техt в Form1->Edit1->Text сразу введи что нить и потом скомпиль попробуй

Автор: witex 4.12.2006, 19:55
Просто луше посылать данные на форму модальную, чем считывать с другой! Всегда работать будет!
А так у тебя форма блокируеться первая!

Автор: Rodman 4.12.2006, 19:56
Код

ShowMessage("Текст: "+Form1->Edit1->Text);


тоже ничего не видет?

Автор: Mpak 4.12.2006, 20:07
Цитата

Просто луше посылать данные на форму модальную, чем считывать с другой! 


Не понял... а как послать данные?

Автор: witex 4.12.2006, 20:07
Rodman, чего флудишь то?

Автор: Rodman 4.12.2006, 20:15
witex, сорри...

Глюкнуло... 


Добавлено @ 20:17 
Mpak, выложи полный исходник

Автор: witex 4.12.2006, 20:24
Код

Form2->Caption = Form3->Caption;
Form2->Label1->Caption = "Text "+ Edit1->Text;
Form2->ShowModal();

Декларируешь опять же форму втрую на первой!
и при обработчике нажатия батона введи этот код! вот и всё!
Ток убери со второй формы код при загрузке!

Автор: Partizan 4.12.2006, 20:32
вычо прикалываетесь? =)))
просто конструктор формы вызывается вместе с первой формой...создаются они вместе практически...
при вызове Show или ShowModal просто меняется Visible на TRUE....
Решение проблемы:

надо код:

Код

Form2->Caption=Form1->Caption;
Form2->Label1->Caption="Текст: "+Form1->Edit1->Text;


перенести в обработчик события OnShow...

Автор: Mpak 4.12.2006, 20:33
witex,  Спасибо! Заработало!


Rodman, Спасибо, но уже зароботало ;)

А не могли бы вы объяснить почему, у меня не работало? (принцип)

Автор: Partizan 4.12.2006, 20:34
юмористы)

Добавлено @ 20:35 
Цитата(Mpak @ 4.12.2006,  20:33)
А не могли бы вы объяснить почему, у меня не работало? (принцип)

смотри мой пост выше....

Автор: witex 4.12.2006, 20:39
Странно, у меня даже если на копку нажимаешь, выдаёт Acces violidation.

Автор: Mpak 4.12.2006, 20:50
Partizan,  спасибо, буду должен ;)

Автор: _int64 19.3.2007, 18:56
Unit1.cpp
Код

#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool s;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   s=1;
   Form2->Show();
}
//---------------------------------------------------------------------------


Unit2.cpp
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
extern bool s;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::FormClick(TObject *Sender)
{
      if(s) ShowMessage("!!!");
}
//---------------------------------------------------------------------------


Сообщение при клике на вторую форму не выводится....

при компилировании пишет
Цитата

[Linker Warning] Public symbol '_s' defined in both module D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ and D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT2.OBJ


[/quote]
[/quote]

Автор: _hunter 19.3.2007, 19:22
а не проще ли (в таком случае) сделать s членом класса (что TForm1 что TForm2)?
и в .cpp extern писать не нужно (мог бы и на обявление/реализацию TForm1 глянуть)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)