Witam, chciałbym się dowiedzieć czy można dynamicznie generować ilość "labeli" (innych komponentów) w trakcie działania programu. Np. użytkownik wpisuje w edita liczbę 20 i po kliknięciu rysyje mu się 20 labeli lub buttonów. Czy da się coś takiego zrobić? Jeśli tak to jaK?
0
0
Jasne że tak. Tworzysz wektor i tam zapisujesz wskaźniki do komponentów które wytworzyłeś w pętli i już. Tylko musisz komponentowi podać rodzica żeby był widoczny na formie:-)
0
Pokemaniak napisał(a)
Jasne że tak. Tworzysz wektor i tam zapisujesz wskaźniki do komponentów które wytworzyłeś w pętli i już. Tylko musisz komponentowi podać rodzica żeby był widoczny na formie:-)
Możesz podać jakiś przykład ?
0
{
int Ilosc = StrToIntDef(Edit1->Text, 0);
for (int i=0; i<Ilosc; i++)
{
TLabel *Nowy = new TLabel(this);
Nowy->SetBounds(100, 100+i*28, 100, 24);
Nowy->Parent = this;
Nowy->Caption = "Label" + IntToStr(i);
}
}
0
Podany przez Ciebie kod działa. Ale mam jeszcze jedno pytanie ... Jak teraz wywołać zdarzenie onclick dla np. 5, 8, i 12 labela?
0
A żeby nie przepadły do niego wskaźniki:
{
int Ilosc = StrToIntDef(Edit1->Text, 0);
TLabel *Lab = new TLabel [Ilosc];
for (int i=0; i<Ilosc; i++)
{
Lab[i]=new TLabel(this);
Lab[i]->SetBounds(100, 100+i*28, 100, 24);
Lab[i]->Parent = this;
Lab[i]->Caption = "Label" + IntToStr(i);
}
}
0
Dodawanie:
{
int Ilosc = StrToIntDef(Edit1->Text, 0);
for (int i=0; i<Ilosc; i++)
{
TLabel *Nowy = new TLabel(this);
Nowy->SetBounds(100, 100+i*28, 100, 24);
Nowy->Parent = this;
Nowy->Caption = "Label" + IntToStr(i);
Nowy->Tag = i;
Nowy->OnClick = Clicks;
}
}
Metoda Clicks:
void __fastcall TForm1::Clicks(TObject *Sender)
{
ShowMessage(IntToStr(((TLabel*)Sender)->Tag));
}
Metodę należy zadeklarować w plik *.h (może być w ramach private klasy TForm, oraz zdefiniować w *.cpp).