Delphi читает из многих правок

Есть ли возможность изменить что-то вроде этого:

myfunction(1,1,strtoint(form1.a11.text));
myfunction(1,2,strtoint(form1.a12.text));
myfunction(1,3,strtoint(form1.a13.text));
myfunction(1,4,strtoint(form1.a14.text));
myfunction(1,5,strtoint(form1.a15.text));
myfunction(1,6,strtoint(form1.a16.text));
myfunction(1,7,strtoint(form1.a17.text));
myfunction(1,8,strtoint(form1.a18.text));
myfunction(1,9,strtoint(form1.a19.text));

на что то подобное?

   for i:=1 to 9 do
      myfunction(1,i,strtoint(form1.'a1'+i.text));

Я знаю, что это не работает, но я хочу найти способ, как сделать это быстрее. что-то похожее

1 ответ

Решение

Ты можешь использовать FindComponent найти компонент по имени. Это предполагает, что компонент принадлежит объекту формы. Скорее всего, это верное предположение.

(form1.FindComponent('a1'+IntToStr(i)) as TEdit).Text

Лично мне не нравится такой код. Я хотел бы создать массив элементов управления для редактирования:

type
  TForm1 = class
  ....
  private
    FEditArr: array [1..9] of TEdit;
  ....

Затем в конструкторе я бы инициализировал массив:

FEditArr[1] := a11;
FEditArr[2] := a12;
....

Это делает код, который впоследствии получает управление редактированием с учетом индекса, намного чище.

Если вы пойдете по этому пути, то, вероятно, будет проще создать элементы управления для редактирования также во время выполнения, чем создавать их все в конструкторе, а затем записать этот код назначения массива в конструкторе. В общих чертах это выглядит так.

for i := 1 to 9 do
begin
  FEditArr[i] := TEdit.Create(Self);
  FEditArr[i].Parent := Self;
  FEditArr[i].Left := ...;
  FEditArr[i].Top := ...;
end;
Другие вопросы по тегам