如何将对象传递给第二个新的Delphi表单

时间:2014-11-09 02:36:07

标签: delphi

我有一个在Form1上创建的对象,我希望能够访问Form2上的一个字段。我试图谷歌它,没有人能给出我能理解的答案。请原谅,但我是新手。

Form1中

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  Ttest=class
    public
    sName:string;
  end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
end;
var
  Form1: TForm1;
implementation

uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  myObj:Ttest;
begin
  myObj.Create;
  myObj.sName := 'Name';
  Form2.Show;
end;

end.

窗体2

unit Unit2;
  interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       Dialogs, StdCtrls;
type
   TForm2 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
end;

var
 Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
 ShowMessage(myObj.sName);//This is not working
end;

end.

1 个答案:

答案 0 :(得分:4)

您有两个使用对象的表单。您应该在单独的单元中定义对象,并将其列在两个表单的“接口”部分的Uses子句中。尝试使用已经在主库中定义的东西,比如TStringlist,这样你就不会对这部分感到困惑。

根据您在此处显示的内容,您尝试以一种形式创建该对象的实例,并以另一种形式对其进行操作。这是常见的事情:您可能有一个单元要求输入文件名并将文件加载到TStringList中,然后将其交给另一个表单或单元进行处理。

但是,您可以改进这种方式,以减少两种形式之间的耦合。

你想要做的是在TForm2中定义这样的属性:

TForm2 = class( TForm )
. . .
private
  Ftestobj : TTest; // or TStringlist

public
  property testobj : TTest read Ftestobj write Ftestobj;

然后在TForm1.OnButtonClick中执行以下操作:

form2.testobj := myobj;
form2.Show;

然后这就变成了:

procedure TForm2.Button2Click(Sender: TObject);
begin
 ShowMessage(Ftestobj.sName);
end;

事实上,我最近在CodeRage 9中就此主题进行了整个会话。它的标题是,“你有没有接受过你内心的管道工?”这就是将数据移入和移出这样的表单。 (我称之为管道代码。)

搜索“coderage 9”并观看视频。最后是一个链接,您可以在其中下载我的示例代码。这应该会让你忙一阵子。 :)