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

 
Когда обнуляеся свойство
Giny
Отправлено: 10.12.2005, 13:57


Ученик-кочегар

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



Проясните ситуацию. На дочерней форме Form2 есть компонент Edit1 c текстом Edit1->Text="текст" . Закрыв эту форму мы можем обратится в модуле главной формы Form2->Edit1->Text и получим "текст". Открыв опять Form2, увидим что Edit1 пуст. Вопрос, на каком этапе обнулилось свойство.
_shumer
Отправлено: 10.12.2005, 14:53


Ученик-кочегар

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



Самостоятельно СBuilder этого не делает! Но этого можно добиться несколькими способами:
1) Вы все время пересоздаете форму, и тогда в момент ее создания естественно произойдет инициализация начальными условиями.
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2(Owner);
Form2->ShowModal();
AnsiString S = Form2->Edit1->Text;
delete Form2;
}

2)Вы не удаляете форму, но в момент ее отображения на экране прописываете
[CODE]void __fastcall TForm2::FormShow(TObject *Sender)
{
Edit1->Text = "";
}[CODE]

Если ни один, ни второй способ в вашей программе не нашел подтверждения, присылайте тогда текст программы.
Giny
Отправлено: 10.12.2005, 15:31


Ученик-кочегар

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



Я отображаю форму так:
Form2->Show();
a закрываю так
Form2->Close();

Попутный вопрос:
Builder кодом (для не главной формы)
[CODE]
Application->CreateForm(__classid(TForm2), &Form2);
[CODE]
создает форму, но не отображает ее, и оставляет ее в памяти или как?

По команде Form2->Show(); отображает ее, а Form2->Close(); скрывает или удаляет из памяти?

trigger
Отправлено: 10.12.2005, 15:51


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







можно попробовать скрывать форму Form2->Hide();
может это поможет ...
_shumer
Отправлено: 10.12.2005, 15:58


Ученик-кочегар

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



Попробуйте запустить следующий пример и в момент первого "слипа" ввести что-то в Edit1->Text. Посмотрите, что из этого получится, и когда введенный вами текст все-таки попадет в Edit1. Я думаю после такого теста вы сами сможете ответить на свои вопросы.
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2->Show();
Form1->Caption = AnsiString(int(Form2->Visible));
Sleep(5000);
Form2->Close();
Form1->Caption = AnsiString(int(Form2->Visible));
Sleep(5000);
Form2->Visible = true;
Form1->Caption = AnsiString(int(Form2->Visible));
}

Единственное — для меня так и остается загадкой, почему у вас обновляются данные в Edit1. Из того, что вы привели, следует скорее обратный вывод.

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