6

私はデルファイで手続きを書こうとしています。このプロシージャは、TControl子孫要素の名前を取得し、いくつかのプロパティを変更しようとします。しかし、私がそれをやろうとすると、Delphi は次のようなエラーを出します:

E2033 実際の var パラメータと仮の var パラメータの型は同一でなければなりません

手順:

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

使用例:Change_prop(Label1, 50,200); そのエラーの解決策は何ですか..ありがとうございます。

4

3 に答える 3

11

Control パラメーターの var を削除して、それを値パラメーターにするだけです。Delphi オブジェクトは実際には参照型として実装されているため、値または const パラメータとしてプロシージャに渡す場合でも、それらのメソッドを呼び出したり、メンバ フィールドを変更したりできます。

于 2010-12-10T17:32:36.883 に答える
5

varを削除するだけです。コントロールのプロパティを変更する必要はありません。

procedure Change_prop(Control: TControl;height:integer;width:integer);
begin
......
end;
于 2010-12-10T17:32:02.247 に答える
2

デビッドが言ったように、問題は変数にあります。これは、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 に答える