Meenzer Geschrieben 7. März 2003 Geschrieben 7. März 2003 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ß
geloescht_JesterDay Geschrieben 7. März 2003 Geschrieben 7. März 2003 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.
Der Kleine Geschrieben 7. März 2003 Geschrieben 7. März 2003 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!
geloescht_JesterDay Geschrieben 7. März 2003 Geschrieben 7. März 2003 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.)
Meenzer Geschrieben 7. März 2003 Autor Geschrieben 7. März 2003 Alles klar, hat gefunzt. Danke Euch beiden Gruß
Der Kleine Geschrieben 7. März 2003 Geschrieben 7. März 2003 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!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden