Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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ß

Geschrieben

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.

Geschrieben

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!

Geschrieben
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.)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...