-1

您好,我收到错误 E2197:[DCC 错误] proj1.pas(34):E2197 常量对象不能作为 var 参数传递

unit proj1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, AdvEdit;

type
  TForm1 = class(TForm)
    AdvEdit1: TAdvEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SetEditText(const instr: string; out outstr: string);
begin
  outstr := instr;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetEditText('Pippo', AdvEdit1.Text);
end;

end.

当然,我可以解决写作:

procedure TForm1.Button1Click(Sender: TObject);
var sText: string
begin
  SetEditText('Pippo', sText);
  AdvEdit1.Text := sText;
end;

但是当我有很多 AdvEdit 时,就很难了。然后我问,是否可以在某些模式下直接将 TAdvEdit.Text 作为参数在我的程序中解决问题?非常感谢。

4

1 回答 1

4

我认为那Text是一种财产。而且您不能将属性传递给varorout参数。您只能将变量传递给这些类型的参数。

您需要找到一种不同的方式来编写代码。你想出了一个这样的想法,但对我来说它似乎不必要地复杂。我看不到任何比以下更简单的东西:

AdvEdit1.Text := 'Pippo';

怎么会有比这更简单的代码呢?您至少需要指定以下内容:

  • 目标控制。
  • 我们正在处理Text财产。
  • 我们正在分配的事实。
  • 新值。

上面的代码就是这样做的,仅此而已。

于 2012-11-26T14:41:18.033 回答