[Delphi] component namen in een loop

Pagina: 1
Acties:

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22:56

Hu9o

Schokkend

Topicstarter
Ik heb 4 labels, en ik wil die in een loop op de volgende manier gebruiken.
code:
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i:=1 to 4 do
  begin
    (Label+IntToStr(i)).Caption:=IntToStr(i);
  end;
end;

Dit geeft een foutmelding, omdat dit Label+IntToStr(i) niet goed gekeurd wordt.

Weet iemand hoe dit wel wil??

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Een form heeft (net als andere container-controls) een property Controls. Dit is een array die een verwijzing bevat naar alle controls op die form.
Als je daar door looped, kun je dus uw labels te pakken krijgen:
code:
1
2
3
4
5
for Indx := 0 to Form1.ControlCount - 1 do begin
  if Form1.Controls[Indx] is TLabel then begin
     TLabel(Form1.Controls[Indx]).Caption := 'bla';
  end;
end;

https://fgheysels.github.io/


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Of je maakt een array.
code:
1
2
3
4
5
6
7
8
9
10
11
12
var Labels:array[1..5] of TLabel;

begin
   Labels[1]:=Label1;
   Label2[2]:=Label2;
...
   Labels[5]:=Label5;

   for i:=1 to 5 do begin
    Labels[i].Caption:='Hoi';
   end;
end;

Siditamentis astuentis pactum.


  • nulkelvin
  • Registratie: Maart 2000
  • Laatst online: 09-06-2021

nulkelvin

ehmm is er nog koffie?

Op dinsdag 23 april 2002 09:24 schreef whoami het volgende:
Een form heeft (net als andere container-controls) een property Controls. Dit is een array die een verwijzing bevat naar alle controls op die form.
Als je daar door looped, kun je dus uw labels te pakken krijgen:
code:
1
2
3
4
5
for Indx := 0 to Form1.ControlCount - 1 do begin
  if Form1.Controls[Indx] is TLabel then begin
     TLabel(Form1.Controls[Indx]).Caption := 'bla';
  end;
end;
Kan je met deze constructie niet krijgen, dat er toevallig een niet-label control tussendoorkomt en je dus in je label captions iets van {1,2,5,7} kan krijgen?

ik wilde dat ik eens een coole sig. kon bedenken.


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Op dinsdag 23 april 2002 13:18 schreef nulkelvin het volgende:

Kan je met deze constructie niet krijgen, dat er toevallig een niet-label control tussendoorkomt en je dus in je label captions iets van {1,2,5,7} kan krijgen?
Ja dat kan (daarom staat er ook een if in), maar dan gebruik je maar een aparte teller.

https://fgheysels.github.io/


  • nulkelvin
  • Registratie: Maart 2000
  • Laatst online: 09-06-2021

nulkelvin

ehmm is er nog koffie?

Op dinsdag 23 april 2002 09:17 schreef Hu9o het volgende:
Ik heb 4 labels, en ik wil die in een loop op de volgende manier gebruiken.
code:
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i:=1 to 4 do
  begin
    (Label+IntToStr(i)).Caption:=IntToStr(i);
  end;
end;

Dit geeft een foutmelding, omdat dit Label+IntToStr(i) niet goed gekeurd wordt.
volgens mij zou het zo moeten kunnen


Weet iemand hoe dit wel wil??
Volgens mij kan het zo wel, sorry is niet getest........
code:
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
for i:=1 to 4 do
  begin
  (Findcomponent('Label'+IntToStr(i))as TLabel).Caption:=IntToStr(i);
  end;
end;

edit:
bron toegevoegd

[edit2]getest en werkt :) zelf ook weer wat geleerd. :P [/edit2]
bron: http://www.delphi-treff.de/content/tutorials/einsteigerkurs/index.php4?print=1&kat=6

ik wilde dat ik eens een coole sig. kon bedenken.


Verwijderd

Op dinsdag 23 april 2002 09:32 schreef Varienaja het volgende:
Of je maakt een array.
code:
1
2
3
4
5
6
7
8
9
10
11
12
var Labels:array[1..5] of TLabel;

begin
   Labels[1]:=Label1;
   Label2[2]:=Label2;
...
   Labels[5]:=Label5;

   for i:=1 to 5 do begin
    Labels[i].Caption:='Hoi';
   end;
end;
Waarom zo'n omslachtige methode? Waarom zelf nog een array maken terwijl deze array al tot je beschikking staat (Controls[Index])?

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09-09 17:08

Knutselsmurf

LED's make things better

Op dinsdag 23 april 2002 15:11 schreef hvdberg het volgende:

[..]

Waarom zo'n omslachtige methode? Waarom zelf nog een array maken terwijl deze array al tot je beschikking staat (Controls[Index])?
Omdat daar, zoals al eerder genoemd is, ook andere componenten in staan, waardoor je nummering in de war kan lopen. Wat je natuurlijk wel kunt doen, is je labels runtime aanmaken. Dan kun je ze wel makkelijk in een array plaatsen.

- This line is intentionally left blank -


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Op dinsdag 23 april 2002 15:15 schreef Knutselsmurf het volgende:

[..]

Omdat daar, zoals al eerder genoemd is, ook andere componenten in staan, waardoor je nummering in de war kan lopen. Wat je natuurlijk wel kunt doen, is je labels runtime aanmaken. Dan kun je ze wel makkelijk in een array plaatsen.
Niet als je een apart tellertje gebruikt...

https://fgheysels.github.io/


  • nulkelvin
  • Registratie: Maart 2000
  • Laatst online: 09-06-2021

nulkelvin

ehmm is er nog koffie?

ben ik nou suf, of heb ik geen oplossing gegeven, die goed werkt?

ik wilde dat ik eens een coole sig. kon bedenken.


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09-09 17:08

Knutselsmurf

LED's make things better

Op dinsdag 23 april 2002 15:28 schreef nulkelvin het volgende:
ben ik nou suf, of heb ik geen oplossing gegeven, die goed werkt?
Nee, je bent niet suf, en die oplossing werkt, maar in mijn ogen is dat geen fraaie (en snelle) oplossing. Daarom worden er andere oplossingen gegeven. Als namelijk het ontwerp iets beter doordacht zou zijn, zou deze vraag, en jouw oplossing, niet nodig zijn geweest. De andere oplossingen die hier genoemd zijn zijn op dat ontwerp gericht.

- This line is intentionally left blank -


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Die FindComponent oplossing vind ik anders niet zo mis. Maar achter de schermen zal ze ook wel door de Controls array loopen en zal ze dus ook trager zijn dan de mijne, aangezien ik maar 1x door die array loop, en jij x keer.

https://fgheysels.github.io/


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 22:56

Hu9o

Schokkend

Topicstarter
Ok voldoende antwoord lijkt me zo.


Iedereen bedankt voor z'n bijdrage.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<

Pagina: 1