我想在另一个单元中重用对象的属性。
在form1上,我已通过调用创建过程初始化了对象。然后,使用设置过程为fUserID分配一个值。现在在下一个窗体Form2上,我想调用getUserID函数以检索在上一个窗体中获得的属性值。
我尝试重新创建对象,但该值丢失了。例如,如果我分配ID 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给出了错误访问冲突。 如何延长对象的寿命?
答案 0 :(得分:0)
您仍然没有显示适当的最小示例,我们可以编译并重现您的问题,但是很清楚您的问题是什么。有两个objUser
对象,一个由Form1
拥有,另一个由Form2
拥有。您想访问Form1
中Form2
中的那个,因此必须引用Form1
,类似这样
procedure TForm2.FormShow(Sender: TObject);
begin
lbl1.Caption := IntToStr(Form1.objUser.getUserID);
end;
当然,这假设objUser
在Form1
中是全局可见的,虽然可能不是,但是您显示的内容不足以让我们知道。另外,Form1
必须对Form2
可见,但是同样,您也无法充分了解我们是否知道它。这就是为什么您需要尽可能少地向我们展示问题,而又足以让我们准确地再现您的问题。