Popełniłeś mnóstwo błędów, ale największy popełniasz gdy tworzysz okno MDIChild (Form3), tworzysz je w oknie SDIAppForm i tylko to okno zna utworzone dynamicznie okno Form3, gdyż jest ono definiowane lokalnie, a więc okno Form2 nie zna adresu okna Form3, gdyż Form3 jest oknem dynamicznym. Nie występuje błąd podczas kompilacji, gdyż oknu Form3 tworzonemu dynamicznie nadałeś taką nazwę jaką ono już ma, czyli Form3, nie jest t co prawda błędem, ale w ten sposób nie widzisz błędu w kodzie, gdybyś zamiast:
- Kod: Zaznacz cały
void __fastcall TSDIAppForm::WystawankietClick(TObject *Sender)
{
TForm3 *Form3 = new TForm3(this);
Form3->Show();
}
nadał oknu tworzonemu dynamiczne nową nazwę, czyli np:
- Kod: Zaznacz cały
void __fastcall TSDIAppForm::WystawankietClick(TObject *Sender)
{
TForm3 *New_Form3 = new TForm3(this);
New_Form3->Show();
}
to dalej musiałbyś postąpić tak:
dla Form2:- Kod: Zaznacz cały
void __fastcall TForm2::Edit1Change(TObject *Sender)
{
New_Form3->text1(Edit1->Text);
}
gdyż przy takim zapisie:
- Kod: Zaznacz cały
void __fastcall TForm2::Edit1Change(TObject *Sender)
{
Form3->text1(Edit1->Text);
}
nie odwoływałbyś się do utworzonego okna Form3 a tylko do istniejącego okna i błąd występowałby dalej.
Co jest o tyle prawidłowe, że Form2 nie wie nic o lokalnie tworzonym oknie dynamicznym.
Poza tym jeżeli utworzysz kilka okien dynamicznych o takiej samej nazwie to okno Form2 i tak nie będzie wiedziało do którego ma się odwołać, dlatego zawsze odwoła się do okna utworzonego jako ostatnio.
Kolejna sprawa jeżeli z poziomu FOrm3 wywołujesz okno Modalne Form2, to niestety okno Modalne nie będzie mogło się bezpośrednio (w czasie rzeczywistym), w zdarzeniu OnChange obiektu Edit1 odwoływać się do okna Form3, gdyż zwyczajnie Form3 jest zablokowane dopóki aktywne jest okno modalne, dlatego powinieneś wywoływać okno Form2 jako niemodalne, czyli Form2->Show()
Co do pierwszego problemu nie bardzo wiem jak można by zdefiniować dowolną liczbę dynamicznych okien MDIChild jako okna globalne, potrzebny byłby tutaj jakiś mechanizm nadawania nazw, co akurat dałoby się zrobić,
Można by zadeklarować Form3 jako okno globalne i tworzyć lokalnie jako dynamiczne, ale to mija się z celem, gdyż równie dobrze można zrezygnować z okien MDI i dynamicznego tworzenia okna Form3.
Musisz dokładniej przemyśleć ten projekt.