我是超级新手,并尝试编写以下代码,将以下代码设置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;
注意,这里我们使用ComponentCount
,并Components[]
从形式本身。我们删除了邪恶的with
言论。TEdit
在首先使用is
运算符检查组件的类型之后,我们不得不将组件转换为type的引用。
只要表单拥有在其中找到的所有编辑内容,此方法便会起作用。但是,如果您动态创建控件,或者使用框架或父窗体,则基于所有权通过的这种方法Components[]
将不会产生所有控件。在这种更复杂的情况下,您需要使用ControlCount
和来使用父/子关系进行迭代Controls[]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句