1

連絡先アドレスを表示する 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;

どうすればこれを回避できますか?

前もって感謝します

4

1 に答える 1

12

外部(グローバルと呼ばれることが多い)変数を使用していますが、フォームクラスのインスタンスフィールドが必要な場合がありますTContactDetailsFrm

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

これFは、Delphiのプライベートフィールドの慣用的なプレフィックスです。

于 2012-04-24T13:49:10.527 に答える