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ß Zitieren
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. Zitieren
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! Zitieren
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.) Zitieren
Meenzer Geschrieben 7. März 2003 Autor Geschrieben 7. März 2003 Alles klar, hat gefunzt. Danke Euch beiden Gruß Zitieren
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! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.