现在的位置: 首页 > 综合 > 正文

Delphi MDI模式下子窗体间相互传值

2017年12月02日 ⁄ 综合 ⁄ 共 2391字 ⁄ 字号 评论关闭

创建主窗体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.

实现了两个同级子窗体能相互传递参数,不依赖主窗体设置全局变量形式传值。

抱歉!评论已关闭.