Повторное использование атрибутов объекта в разных единицах - PullRequest
0 голосов
/ 19 июня 2019

Я хочу повторно использовать атрибуты объекта в другом подразделении.

В form1 я инициализировал объект, вызвав процедуру create.Затем я присваиваю значение fUserID, используя процедуру set.Теперь в следующей форме, Form2, я хочу вызвать функцию getUserID, чтобы получить значение атрибута, полученное в предыдущей форме.

Я пытался воссоздать объект, но значение потеряно.Например, если я присваиваю идентификатор 2, когда функция GetUSerID вызывается в новом модуле, без воссоздания объекта выдается ошибка.Когда объект воссоздается, он возвращает nil.

unit clsUser_U;

interface
type
  TUser = class(TObject)
    private
      FUserID : integer ;
    public
      constructor Create ;
      procedure setUserID(iID : integer) ;
      Function getUserID : Integer ;
    end;

implementation

{ TUser }

constructor TUser.Create;
begin

end;

function TUser.getUserID: Integer;
begin
  Result := FUserID ;
end;

procedure TUser.setUserID(iID: integer);
begin
  FUserID := iID ;
end;

end.

Form1 выглядит следующим образом:

unit Form1_U;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  clsUser_u, form2_u;

type
  TForm1 = class(TForm)
    btnNextForm: TButton;
    procedure FormShow(Sender: TObject);
    procedure btnNextFormClick(Sender: TObject);
  private
    { Private declarations }
    objUser : TUser ;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnNextFormClick(Sender: TObject);
begin
  Form2.ShowModal ;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  objUser := TUser.Create ;
  objUser.setUserID(2);
end;

end.

Form2 выглядит следующим образом:

unit Form2_U;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  clsUser_U;

type
  TForm2 = class(TForm)
    lbl1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    objUser : TUser ;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
  lbl1.Caption := inttostr(objUser.getUserID);
end;

end.

Delphi выдает ошибкунарушение доступа.Как мне увеличить время жизни объекта?

1 Ответ

0 голосов
/ 19 июня 2019

Вы все еще не показываете правильный минимальный пример, это то, что мы могли бы скомпилировать и воспроизвести вашу проблему, но довольно ясно, в чем ваша проблема. Есть два objUser объекта, один из которых принадлежит Form1, а другой - Form2. Вы хотите получить доступ к одному из Form1 в Form2, поэтому вы должны ссылаться на Form1, что-то вроде этого

procedure TForm2.FormShow(Sender: TObject);
begin
  lbl1.Caption := IntToStr(Form1.objUser.getUserID);
end;

Это предполагает, конечно, что objUser виден в глобальном масштабе в Form1, что может и не быть, но вы не показываете достаточно, чтобы мы знали. Кроме того, Form1 должен быть видимым для Form2, но опять же вы не показываете нам достаточно, чтобы знать, является ли это или нет. Вот почему вам нужно показать нам как можно меньше, чтобы показать ошибку, но достаточно, чтобы мы смогли точно воспроизвести вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...