我试图从我创建的对象访问用户名字符串,并以不同的形式使用它。Delphi 10 - 如何在两种表单之间共享对象?
我不想重新创建对象,否则用户名字段将被清除。
我怎样才能检索到从第二表格对象的用户名,如果我已经创建,并从第一种形式(其中我做obj.create(sUsername)
?
设置的用户名我已经尝试过创建一个名为function GetUsername : string
到funtion发送结果,但它最终给我一个违规错误的另一种形式?有人可以给我一个基本的例子如何“呼叫”从另一种形式发送到它的OOP的值左右
UPDATE - 对不起,这里是我想要做的一个例子,但我得到一个错误违规,你可以看到我没有释放对象,因为我想保留值对于其他形式:
**First Form :**
unit SendUsername_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, clsUsername, GetUsername_u;
type
TForm1 = class(TForm)
edtUsername: TEdit;
Button1: TButton;
btnShowOtherForm: TButton;
procedure Button1Click(Sender: TObject);
procedure btnShowOtherFormClick(Sender: TObject);
private
objUsername: Ttest;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnShowOtherFormClick(Sender: TObject);
begin
Form1.Hide;
form2.show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
objUsername := Ttest.create(edtUsername.Text);
end;
end.
第二形态:
unit GetUsername_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, clsUsername;
type
TForm2 = class(TForm)
btnGetUsername: TButton;
procedure btnGetUsernameClick(Sender: TObject);
private
objUsername: ttest;
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.btnGetUsernameClick(Sender: TObject);
begin
ShowMessage(objUsername.GetUsername);
end;
end
OOP /类:
unit clsUsername;
interface
uses
SysUtils;
type
Ttest = class(TObject)
private
fUsername: string;
public
constructor create(sUsername: string);
function GetUsername: string;
end;
implementation
{ Ttest }
constructor Ttest.create(sUsername: string);
begin
fUsername := sUsername;
end;
function Ttest.GetUsername: string;
begin
Result := fUsername;
end;
end.
显示您尝试过的。 –
通常,如果一个对象(在本例中是一个表单)持有对另一个对象(在本例中是另一个表单)的引用,那么它可以将消息发送到该对象。因此,如果表单A有一个对象发送到表单B并具有对表单B的引用,则表单B可以公开功能来接受该对象并对其执行某些操作。这是所有*非常*一般,但是,因为我们看不到您的代码。 – David
如果两种形式需要访问同一个对象,则应该在一个单独的单元中定义和实例化,这两种形式都可以在其使用条款中引用。请出示相关的代码以获得更具体的建议。 –