如何根据表单的每个不同实例在变量中使用不同的值?

mra*_*mra 1 delphi variables mdi scoping

我有一个显示联系地址的mdi表格.由于它是Mdi,我可以打开表格的多个副本.然而,显然所使用的变量在表格中被"复制".因此,在下面的代码中,ContactTypeId将具有基于创建的最后一个表单的值.

implementation

uses DataModule, MainForm;

{$R *.dfm}

var ModuleUserLevel, ContactId, ContactTypeId : Integer;
  EditMode, EditAccess, AddAccess, DeleteAccess  : Boolean;
  ContactName : String;

constructor TContactDetailsFrm.Create(AOwner:TComponent; InContactTypeId, InContactId : Integer);
Begin
  Inherited Create(AOwner);
  ContactId := InContactId;
  ContactTypeId := InContactTypeID;
End;
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?

提前致谢

Uli*_*rdt 12

您正在使用外部(通常称为有点不精确,作为全局)变量,但可能需要表单类中的实例字段TContactDetailsFrm:

type
  TContactDetailsFrm = class(TForm)
  private
    FModuleUserLevel, FContactId, FContactTypeId: Integer;
    FEditMode, FEditAccess, FAddAccess, FDeleteAccess: Boolean;
    FContactName: string;
  public
    { Public-Deklarationen }
  end;
Run Code Online (Sandbox Code Playgroud)

F是Delphi中私有字段的惯用前缀.