我是超级新手,并尝试编写以下代码,该代码将每个TEdit.Text设置为代码中提到的一个

procedure TForm2.Button1Click(Sender: TObject);
var
  i : integer;
  Edit : TEdit;
begin
  for i := 0 to Edit.ComponentCount - 1 do
  begin
    with Edit.Components[i] do
    begin
      Text := 'Done';
    end;
  end;
end;


我究竟做错了什么 ?

最佳答案

这是我可以看到的错误:


您永远不会为Edit分配值。
通常,表单拥有所有组件,因此TEdit将拥有零个拥有的组件。
Edit.Components[i]是类型TComponent,它没有Text属性。如果您的代码可以编译,那么Text实际上就是该形式的代码。从这一点上您应该学习的教训是永远不要再使用with


您应该使用以下代码解决此问题:

procedure TForm2.Button1Click(Sender: TObject);
var
  i: Integer;
  Edit: TEdit;
begin
  for i := 0 to ComponentCount-1 do begin
    if Components[i] is TEdit then begin
      Edit := TEdit(Components[i]);
      Edit.Text := 'Done';
    end;
  end;
end;


请注意,这里我们使用表单本身的ComponentCountComponents[]。我们已经删除了邪恶的with语句。在首先使用TEdit运算符检查组件的类型之后,我们不得不将组件转换为类型为is的引用。

只要表单拥有在其中找到的所有编辑内容,此方法便会起作用。但是,如果您动态创建控件,或者使用框架或父窗体,则这种基于Components[]所有权的方法将不会产生所有控件。在这种更复杂的情况下,您需要使用ControlCountControls[]使用父/子关系进行迭代。

关于delphi - 如何为每个TEdit设置特定的文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49192967/

10-11 18:48