Problem z obsługą dynamicznych form. (C++ Builder)

0

Cze All.
Mam taki dziś problemik: Jak klikam na różne elementy w listBox to otwierają mi się nowy form będący kopią Form3 (dynamicznie), każdy z nich otrzymuje nową nazwe (form->Name). Na głównym formie mam buttona który za zadanie ma wstawić pewien tekst do komponentu memo1 na tym dynamicznym formie. Robie to tak Form3->Memo1->Lines->Add("nowy tekst"); ale to nie działa - pewnie dla tego że nie wie na którym to formie ma się pojawić. Pytanie moje jest więc taki: Jak rozróżnić te formy i jak wstawiać tekst na określony form??
Z góry dzieki za każdą pomoc.

0

Tak myślę sobie żeby zrobić tablicę Form i później ją przeszukiwać. Tylko nie wiem jak ja stworzyć gdyż jak daje TForm3 *tab = new TForm3 [i]; to jest błąd odnośnie konstruktora. A liczbę elementów w listBox mam zmienną więc i rozmiar tej tablicy powinien być ustalany dynamicznie.

0
Parys napisał(a)

Cze All.
Mam taki dziś problemik: Jak klikam na różne elementy w listBox to otwierają mi się nowy form będący kopią Form3 (dynamicznie), każdy z nich otrzymuje nową nazwe (form->Name). Na głównym formie mam buttona który za zadanie ma wstawić pewien tekst do komponentu memo1 na tym dynamicznym formie. Robie to tak Form3->Memo1->Lines->Add("nowy tekst"); ale to nie działa - pewnie dla tego że nie wie na którym to formie ma się pojawić. Pytanie moje jest więc taki: Jak rozróżnić te formy i jak wstawiać tekst na określony form??
Z góry dzieki za każdą pomoc.

Nie rozumiem...Skoro tworzysz dynamicznie jakas forme nadajesz jej jakas nazwe np Form4. I na Form4 jest rowniez dynamicznie utworzony jakis Memo4. I skoro chcesz wywolac w Memo jakis tekst to dlaczego odwolujesz sie do Form3->Memo1... ??? Nie rozumiem. :-/

0

Ja tak tworzę te formy:

void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
TForm3 *form=new TForm3(this); 
form->Name=ListBox1->Items->Strings[ListBox1->ItemIndex];
form->Show();
}

I na tym Form3 jest tylko Memo1.
Czyli otwieram kilka form bedących kopią Form3. Tak więc nie jest to Form4 i Memo4.

0

Jeśli masz dynamiczną ilość form, to lepiej wykorzystać np. deque (ja tak robię).
Przykład:

```cpp #include <deque> #ifndef _RWSTD_NO_NAMESPACE using namespace std; #endif

int i = 0;
typedef deque<TForm3*,allocator<TForm3*> > Tformy;
typedef Tformy::iterator iterFormy;
Tformy formy;

//Twoje dodawanie formy:
TForm3 *form = new TForm3(this);
form->Name="Frm" + IntToStr(i++);
form->Show();
formy.push_back(form); //tu wrzucamy nową formę do deque

//Przykład wpisania do każdego Memo tekstu "asd"
//można też odwołać się przez index -> formy[3]->Memo1->Lines....
iterFormy iter;
for (iter = formy.begin(); iter < formy.end(); iter++)
(*iter)->Memo1->Lines->Add("asd");

</div>

Obsługa deque -> F1
0
Marooned napisał(a)

typedef deque<TForm3*,allocator<TForm3*> > Tformy;
^

W tym miejscu pokazuje mi sie taki błąd: E2299 Cannot generate template specialization from 'deque<_Tp,_Alloc>'

Szukałem w helpie co z tym zrobić ale nic nie odnalazłem co robie nie tak. Proszę o jeszcze jakąś pomoc. :)

Ok Już działa pomogło mi to:
http://4programmers.net/Forum/106393?h=deque#106393

THX ALL :)

//wow, nawet nie pamiętałem, że tak ładnie to opisałem na forum [green] - M

1 użytkowników online, w tym zalogowanych: 0, gości: 1