Widać, że będą się tylko zmieniały numerki przy Captionie i Edicie. Jak zapisać to jakoś krócej w czytelniejszej formie ? Bez sensu jest pisanie tego po 50 razy zmieniając tylko 3 numerki, utrudnia to znalezienie błędów to maksimum. Dzięki z góry.
Musisz przerobić swój kod tak, żeby elementy formatki takie jak Label oraz Edit były umieszczone w tablicy, a nie jako osobne, kolejno iterowane zmienne. Wtedy Twój kod mógłby wyglądać tak:
for i=1 to 3 do
Label[i].Caption := IntToStr(StrToInt(Edit[2*i-1].Text) + StrToInt(Edit[2*i].Text));
EDIT: poprawiłem kod tak, by zgadzał się z tym co sam podałeś.
Ah, dzięki, wiec rozwiązanie kryje się w tablicy. Bo próbowałem tam powstawiać zmiennie i zwiększać je pętla, ale nie ruszało. Teraz na pewno będzie śmigać, dzięki.
for i=1 to 3 do Label[i].Caption:=IntToStr(StrToInt(Edit[i,0].Text) + StrToInt(Edit[i,1].Text));
Poza tym po napisaniu dodatkowej procedury:
procedure Form1.Add(Label:TLabel;EditA,EditB:TEdit);
begin
Label.Caption:=IntToStr(StrToInt(EditA.Text)+StrToInt(EditB.Text));
end;
for i=1 to 3 do Add(Label[i],Edit[i,0],Edit[i,1]);
Tak szybko wytłumaczę że DRY to jedna z zasad clean code co w rozwinięciu znaczy Don’t repeat yourself (nie powtarzaj się) i jest to jedna ze złotych zasad tworzenia oprogramowania.
Co do problemu -> powinieneś utworzyć klasę/strukturę która zgrupuje logicznie label z dwoma polami edit. Wtedy na tym poziomie abstrakcji który pokazujesz tutaj wystarczy Ci jedna tablica/lista elementów owego typu, a do realizacji zadania jeden foreach.
Jeśli przyjmiesz propozycje trzymania tego w tablicach - zacierasz relacje między tymi elementami i utrudnisz tym samym komuś a może nawet sobie czytanie tego kodu za jakiś czas.
implementation
var
tab:array[1..10] of TLabel;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 1 to 10 do
tab[i]:=TLabel.Create(Self);
With tab[i] do
begin
Left:=i*30+100;
Top:=i*30+100;
Caption:='Ohgyvu';
Parent:=self;
Font.Size:=16;
end;
end;
end.
Dlaczego to nie działa ? Tzn zamiast zapełnić okno 10-cioma labelami wywala błąd (acces violation…).