Entwickler-Ecke

Datenbanken - Eigenschaften mehrerer DBEdit Felder gleichzeitig ändern


Josef-B - Di 27.02.07 22:25
Titel: Eigenschaften mehrerer DBEdit Felder gleichzeitig ändern
Ich habe so ca. 20 DBedits.

dbedit1, dbedit2, dbedit3 usw.

Jetzt will ich die alle auf readonly setzen.

Habe mir das ungefähr so gedacht:


Delphi-Quelltext
1:
2:
3:
for i:= 0 to 19 do
  begin
  dbedit(i).????.readonly := true;


So als array gehts sicher nicht, aber wie? oder bin ich da total auf dem Holzweg und ich muss
die dann alle einzeln auf readonly setzen?


Blawen - Mi 28.02.07 00:16

"Findcomponent" dürfte Dich weiterbringen


oldmax - Mi 28.02.07 13:56

Hi
Wenn deine Objektnamen mit einer laufenden Integerzahl enden, denn ist FindComponent der richtige Weg.


Delphi-Quelltext
1:
TDBEdit(FindComponent('DBEdit'+IntToStr(i))).readonly := true;                    


Gruß oldmax


hansa - Mi 28.02.07 14:52

user profile iconoldmax hat folgendes geschrieben:
Wenn deine Objektnamen mit einer laufenden Integerzahl enden..


Nur zur Klarstellung :

das mit der Nummer am Schluss des Bezeichners ist keine Bedingung ! Sieht man des öfteren, dass die Leute das glauben.

Das hier ginge auch :


Delphi-Quelltext
1:
TDBEdit(FindComponent('DB'+IntToStr(i)+'Edit')).readonly := true;                    


Die Zahl im Namen dient lediglich zur Vereinfachung von Schleifen, zu sonst nichts.


oldmax - Mi 28.02.07 21:31

Hi
Natürlich hast du recht, aber es ist übersichtlicher mit der Zahl hinten, als wenn sie mitten im Namen steht.
Du kannst die Namen auch völlig durcheinander mit dem Object in eine TStringlist schreiben und über den Index zuordnen
MyList:=TStringlist.Create;
MyList.AddObject('erstesObject',MyEdit);
Auch damit ist ein Indizierter Zugriff auf verschiedene Objecte möglich. der Wege nach Rom sind halt viele....
Gruß oldmax


Josef-B - Mi 28.02.07 23:09

Egal ob der Zähler da jetzt vorne hinten oder in der Mitte steht, ich habs so gemacht, und es klappt wunderbar.

Allerdings hatte ich die Schleife mit findkomponent zuerst im AfterOpen von einer TIBQuery, da bekam ich eine Zugriffsverletzung. Dann habe ich ich das in eine eigene Prozedur ausgelagert, da klappte das. Wieso das sein kann, weiss ich nicht.