创建主窗体frmMain,两个子窗体frmChkldA和frmChildB并取消自动创建。
//主窗体代码:
unit Ufrmmain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tfrmmain = class(TForm) btnCreateChildA: TButton; btnCreateChildB: TButton; procedure btnCreateChildAClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var frmmain: Tfrmmain; implementation uses UfrmChildA,UfrmchildB; {$R *.dfm} procedure Tfrmmain.btnCreateChildAClick(Sender: TObject); var frmChildA:TfrmchildA; begin frmChildA:=TfrmchildA.Create(application); frmchildA.Show; end; procedure Tfrmmain.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; self:=nil; end; end.
//子窗体frmChildA
unit UfrmChildA; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmChildA = class(TForm) btnCreateB: TButton; Edit1: TEdit; procedure btnCreateBClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmChildA: TfrmChildA; implementation uses Ufrmmain,UfrmChildB; {$R *.dfm} procedure TfrmChildA.btnCreateBClick(Sender: TObject); var frmchildB:TfrmchildB; begin frmchildb:=Tfrmchildb.Create(application); frmchildb.Show; end; procedure TfrmChildA.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; self:=nil; end; procedure TfrmChildA.FormCreate(Sender: TObject); begin frmChildA:=self; //关键点 end; end.
//子窗体frmChildB
unit UfrmChildB; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmChildB = class(TForm) btnTongClick: TButton; Edit1: TEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure btnTongClickClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmChildB: TfrmChildB; implementation uses Ufrmmain,UfrmChildA; {$R *.dfm} procedure TfrmChildB.btnTongClickClick(Sender: TObject); begin if Assigned(frmchilda) then with Tfrmchilda do //关键点 begin frmchilda.edit1.Text:=self.Edit1.Text; frmchilda.btnCreateBClick(sender); //不用能frmchilda.btnCreate.click; end; end; procedure TfrmChildB.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; self:=nil; end; procedure TfrmChildB.FormShow(Sender: TObject); begin Edit1.Text:=frmchildA.edit1.Text; end; end.
实现了两个同级子窗体能相互传递参数,不依赖主窗体设置全局变量形式传值。