Lazarus IDE - Lehet-e kóddal megváltoztatni egyszerre több objektum (pl. gomb) tulajdonságait? Pl "Edit[n]. Text. Caption: =. "-nél elvégezni ezt egy for loop-pal n: 1- 10 Edit-re?
Kis kiegészítés:
Tehát e helyett:
edit1.text:='xy';
edit2.text:='xy';
edit3.text:='xy';
edit4.text:='xy';
edit5.text:='xy';
meg szeretném írni ezt rövidebben, vagy úgy, hogy ezt akár 100+ edit-re is el tudjam végezni 100+ sor nélkül.
A kérdésben elrontottam, nincs olyan, hogy text.caption, elgépeltem.
Delphiben ez működik, valószínűleg Lazarusban is:
for i := 0 to Form1.ComponentCount - 1 do begin
if Form1.Components[i] is TEdit then begin
TEdit(Form1.Components[i]).Text := 'xy';
end;
end;
Ez a kód az összes TEdit objektumnak átírja a Text-jét a Form1-en.
#2 A begin..end elhagyható:
with Form1 do for i := 0 to ControlCount - 1 do if (Controls[i] is TEdit) and (Copy(Controls[i].Name,1, 4) = 'Edit') then TEdit(Controls[i]).Text := 'xy';
Létrehozhatod az Editeket dinamikusan is, amelyeket szintén dinamikusan tudsz módosítani is.
pl.:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
private
{ private declarations }
EditList: TList;
fMennyi: byte;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
DinEdit: TEdit;
begin
If Edit1.Text<>'' then
fMennyi:=StrToInt(Edit1.text);
EditList:=TList.Create;
For i:=0 to fMennyi-1 do
begin
DinEdit:=TEdit.Create(self);
with DinEdit do
begin
Parent:=self;
height:=27;
left:=10;
top:=112+(i*30);
width:=100;
text:='MyDinEdit - '+IntToStr(i+1);;
end;
EditList.Add(DinEdit);
end;
Label2.Enabled:=True;
Edit2.Enabled:=True;
Button2.Enabled:=True;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
If Edit2.Text<>'' then
For i:=0 to fMennyi-1 do
TEdit(EditList[i]).Text:=Edit2.Text+' - '+IntToStr(i+1);
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
i: integer;
begin
FreeAndNil(EditList);
end;
end.
Köszi a válaszokat, a dinamikus módot még nem tudom megcsinálni (kb tudom hogy működik, de még nem nagyon foglalkoztam dinamikus létrehozással, csak 4 info órám volt eddig, kicsit előbbre szeretnék menni, órán nagyon lassan haladunk).
Esetleg valaki el tudná magyarázni SinkoL vagy a 2. válaszoló módszerét? Meg hogy hogy lehet specifikusabban, tehát nem minden, csak mondjuk Edit[1,2,3,4]-et állítani, és Edit[5,6,stb.]-t hagyni?
Ha nagyon sok előismeretet igényel, akkor nem muszáj, majd eljutunk órán is biztos, csak érdekel...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!