我正在尝试在delphi中编写一个过程。
此过程获取TControl
后代元素的名称,然后尝试更改某些属性。
但是当我尝试这样做时,Delphi会出现如下错误:
E2033实际和正式变量的类型 参数必须相同
步骤:
procedure Change_prop(var Control: TControl;height:integer;width:integer);
begin
//......
end;
用法示例:Change_prop(Label1, 50,200);
什么可以解决这个错误..谢谢。
答案 0 :(得分:9)
您只需要删除Control参数中的var并使其成为值参数。因为Delphi对象实际上是作为引用类型实现的,所以即使将它们作为值或const参数传递给过程,也可以调用它们上的方法,更改成员字段等。
答案 1 :(得分:5)
只需删除 var - 您无需更改Control的属性:
procedure Change_prop(Control: TControl;height:integer;width:integer);
begin
......
end;
答案 2 :(得分:2)
正如大卫所说,问题出现在 var 中。这并不意味着你可以修改TControl的成员,这意味着你可以用另一个完全不同的TControl 替换 TControl,因为对象是引用类型。
如果要将对象传递给 var 参数,则必须将传递的变量声明为与参数完全相同的类型,以保持类型安全。否则,你可以这样做:
procedure TForm1.VarControl(var control: TControl);
begin
control := TButton.Create;
end;
procedure TForm1.Mistake;
begin
VarControl(self.Memo1); //defined as TMemo
Memo1.Lines.Text := 'Undefined behavior here...';
end;