Veröffentlicht 7. März 200322 j Hallo zusammen! Ich habe in Delphi verschiedene Panels ( Name a1 bis d10 ). Nun gehe ich in einer Schleife durch , um verschiede Werte zu setzen. Wie kann ich nun mein Panel ansprechen?? ------------------------------------------ for i := 1 to 10 do begin for k := 'a' to 'd' do begin //und hier will ich dann sagen, zB. a1.caption := 'Test' end; end; ------------------------------------------ Gruß
7. März 200322 j Also entweder du machst dir ein Array: MyArray : Array of TPanel und kannst dann jedes Panel mit MyArray.Caption ansprechen. (sehr praktisch wenn die Panels zu Laufzeit erzeugt werden) Oder du machst eine Schleife über alle Komponenten: var i: Integer; begin for i:= 0 to self.ComponentCount-1 do begin if (self.Components[i] is TPanel) then if (self.Components[i] as TPanel).Name = 'EinName' then (self.Components[i] as TPanel).Caption:= 'EineCaption'; end; end; self bezeigt sich hier auf das Formular (in meinem Code hab ich es zumindest so), es ginge auch jede andere TWinControl. Ein "Zusammenbauen" des Komponentennamens wie du es mit den beiden Schleifen probierst ist nicht möglich Bei Panel1: TPanel ist Panel1 nur ein Zeiger auf ein TPanel Objekt, das über einen String anzusprechen ('a1') ist also schlecht machbar.
7. März 200322 j Du kannst eine Auflistung der einzelenen Controls durch aufruf aller Controls des Übergeordneten Objektes aufrufen. Direkt den Namen zusammenzusetzen, ist nicht möglich. Also vielleicht so : begin for i := 1 to 10 do begin for k := 'a' to 'd' do begin for l:=0 to self.ComponentCount-1 do begin if self.componen[l].ClassName='TPanel' then begin if self.componen[l].Name=k+inttostr(i) then begin self.componen[l].Caption:='Test'; end; end; end; //und hier will ich dann sagen, zB. a1.caption := 'Test' end; end; end; PS : Und wieder mal zu langsam!
7. März 200322 j Originally posted by Der Kleine for l:=0 to self.ComponentCount-1 do begin if self.componen[l].ClassName='TPanel' then begin if self.componen[l].Name=k+inttostr(i) then begin self.componen[l].Caption:='Test'; end; end; end; self.Components ist vom Typ TComponent, und dieser hat keine Eigenschaft Caption, von daher ist ein Casten unumgänglich Entweder über eine Variable, also Var TempPnl: TPanel ... TempPnl:= self.Components; TempPnl.Caption... oder direkt TPanel(self.Components).Caption oder eben über "as" (s.o.)
7. März 200322 j Originally posted by JesterDay self.Components ist vom Typ TComponent, und dieser hat keine Eigenschaft Caption, von daher ist ein Casten unumgänglich Hast ja Recht!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.