在while循环中增加一个变量? (不是数组)
increment a variable in while loop? (not an array)
我在对话框页面中有很多 EditControls。它们称为 Edit1、Edit2 等。是否可以像使用数组一样使用 while 循环从这些控件中获取值?我知道对于一个数组你可以做类似的事情:
begin
// Loop 5 times
for i := 1 to (10 div 2) do
ShowMessage(Edit[i].Text); <- here I need to get value of Edit1, Edit2, et cetera
end;
如何使用字符串而不是数组来执行此操作?
确保没有ComponentCount
,毕竟是TComponent
属性。如果存在,请使用下面的代码并将名称 Form1
替换为您的 Object Parent of Edits
.
的名称
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i := 0 to Form1.ComponentCount -1 do
if Form1.Components[i].Name = 'Edit' + IntToStr(i+1) then
TEdit(Form1.Components[i]).Text := 'NewTextEdit' + IntToStr(i+1);
end;
如果您想搜索表单中的所有 TEdit,您可以执行以下操作:
var
i: Integer;
begin
for i := 0 to Self.ComponentCount- 1 do
if Self.Components[i] is TEdit then
ShowMessage(TEdit(Self.Components[i]).Text);
end;
如果您的 TEdits 被放置在其他控件(如 GroupBoxes、Panel 等)上,并且您想只在这些控件内搜索,那么您应该这样做:
var
i: Integer;
begin
for i := 0 to gbx1.ControlCount - 1 do
if gbx1.Controls[i] is TEdit then
ShowMessage(TEdit(gbx1.Controls[i]).Text);
end;
或者您可以在多个 TWinControl 中搜索:
var
i: Integer;
begin
for i := 0 to Self.ControlCount - 1 do
begin
//TEdits are in TGroupBox
if Self.Controls[i] is TGroupBox then
ReadEdits(TGroupBox(Self.Controls[i]))
//TEdits are in TPanel
else if Self.Controls[i] is TPanel then
ReadEdits(TPanel(Self.Controls[i]))
else ... (other possible Parent Controls)
end
end;
procedure TForm1.ReadEdits(aParent: TWinControl);
var
i: Integer;
begin
for i := 0 to aParent.ControlCount - 1 do
if aParent.Controls[i] is TEdit then
ShowMessage(TEdit(aParent.Controls[i]).Text)
end;
我在对话框页面中有很多 EditControls。它们称为 Edit1、Edit2 等。是否可以像使用数组一样使用 while 循环从这些控件中获取值?我知道对于一个数组你可以做类似的事情:
begin
// Loop 5 times
for i := 1 to (10 div 2) do
ShowMessage(Edit[i].Text); <- here I need to get value of Edit1, Edit2, et cetera
end;
如何使用字符串而不是数组来执行此操作?
确保没有ComponentCount
,毕竟是TComponent
属性。如果存在,请使用下面的代码并将名称 Form1
替换为您的 Object Parent of Edits
.
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i := 0 to Form1.ComponentCount -1 do
if Form1.Components[i].Name = 'Edit' + IntToStr(i+1) then
TEdit(Form1.Components[i]).Text := 'NewTextEdit' + IntToStr(i+1);
end;
如果您想搜索表单中的所有 TEdit,您可以执行以下操作:
var
i: Integer;
begin
for i := 0 to Self.ComponentCount- 1 do
if Self.Components[i] is TEdit then
ShowMessage(TEdit(Self.Components[i]).Text);
end;
如果您的 TEdits 被放置在其他控件(如 GroupBoxes、Panel 等)上,并且您想只在这些控件内搜索,那么您应该这样做:
var
i: Integer;
begin
for i := 0 to gbx1.ControlCount - 1 do
if gbx1.Controls[i] is TEdit then
ShowMessage(TEdit(gbx1.Controls[i]).Text);
end;
或者您可以在多个 TWinControl 中搜索:
var
i: Integer;
begin
for i := 0 to Self.ControlCount - 1 do
begin
//TEdits are in TGroupBox
if Self.Controls[i] is TGroupBox then
ReadEdits(TGroupBox(Self.Controls[i]))
//TEdits are in TPanel
else if Self.Controls[i] is TPanel then
ReadEdits(TPanel(Self.Controls[i]))
else ... (other possible Parent Controls)
end
end;
procedure TForm1.ReadEdits(aParent: TWinControl);
var
i: Integer;
begin
for i := 0 to aParent.ControlCount - 1 do
if aParent.Controls[i] is TEdit then
ShowMessage(TEdit(aParent.Controls[i]).Text)
end;