6

我正在尝试在delphi中编写一个程序。此过程获取TControl后代元素的名称,然后尝试更改某些属性。但是当我尝试这样做时,Delphi 给出了如下错误:

E2033 实际和形式 var 参数的类型必须相同

程序:

procedure Change_prop(var Control: TControl;height:integer;width:integer);
begin
//......
end;

用法示例:Change_prop(Label1, 50,200); 该错误的解决方案是什么..谢谢。

4

3 回答 3

11

您只需要删除 Control 参数中的 var 并使其成为 value 参数。因为 Delphi 对象实际上是作为引用类型实现的,所以您可以在它们上调用方法、更改成员字段等,即使您将它们作为值或 const 参数传递给过程。

于 2010-12-10T17:32:36.883 回答
5

只需删除var - 您不需要它来更改 Control 的属性:

procedure Change_prop(Control: TControl;height:integer;width:integer);
begin
......
end;
于 2010-12-10T17:32:02.247 回答
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;
于 2010-12-10T17:40:03.713 回答