delphi子窗体关闭时如何触发主窗体的事件

我习惯用事件驱动。

MDI子窗体里申明一个事件,在主窗体里实现这个事件过程。然后在创建MDI子窗体的时候,赋值这个事件。
MDI退出的时候,触发一下这个事件。

例如:
TMDIForm = ...
private
  FOnMDIEvent : TNotifyEvent;

public
  property FOnMDIEvent : TNOtifyEvent read FOnMDIEvent write FOnMDIEvent;
end;

procedure TMdiForm.OnClose(...);
begin
  if Assigned(FOnMDIEvent ) then FOnMDIEvent (Self);
end;

在主窗体的代码中实现一个过程,就像给控件动态赋值一样,应该就可以了

 

 

procedure TfrmCaiGouShouLiao.ZDYItemClick(Sender: TObject);  //自定义TNotifyEvent事件
var
  issize, date1, date2: string;
begin
  inherited;
   vou_no := DataSet1 .FieldByName('vou_no').AsString ;//先记住单据号
  if cxCheckBox2.Checked then
    issize := 'Y'
  else
    issize := 'N';
  date1 := FormatDateTime('yyyy-mm-dd', cxDateEdit1.Date);
  date2 := FormatDateTime('yyyy-mm-dd', cxDateEdit2.Date);
  with DataSet2 do
  begin
    Close;
    ParamByName('store_pno').AsString := cxButtonEdit1.text;
    ParamByName('issize').AsString := issize;
    ParamByName('date1').AsString := date1;
    ParamByName('date2').AsString := date2;
    ParamByName('ofac_no').AsString := Self.ofac_no;
    Open;
  end;
  //定位到原来的记录
   DataSet1 .Locate('vou_no',vou_no,[loCaseInsensitive]) ;//精确匹配
end;

 

子窗体

 private
    { Private declarations }
    FOnMDIEvent: TNOtifyEvent;
   {子窗体里申明一个事件,在主窗体里实现这个事件过程。然后在创建MDI子窗体的时候,赋值这个事件。
MDI退出的时候,触发一下这个事件。}
  public
    { Public declarations }
    property OnMDIClose: TNOtifyEvent  read FOnMDIEvent write FOnMDIEvent;
  end;

procedure ShowfrmCaiGouShouLiouRuKuXuanZe(vou_no,ofac_no: string;OnMDIClose:TNotifyEvent);

var
  frmCaiGouShouLiouRuKuXuanZe: TfrmCaiGouShouLiouRuKuXuanZe;

implementation

procedure ShowfrmCaiGouShouLiouRuKuXuanZe(vou_no,ofac_no: string;OnMDIClose:TNotifyEvent);
begin
  if Assigned(frmCaiGouShouLiouRuKuXuanZe) then
  begin

   frmCaiGouShouLiouRuKuXuanZe.FOnMDIEvent:=OnMDIClose;
    frmCaiGouShouLiouRuKuXuanZe.vou_no := vou_no;
    frmCaiGouShouLiouRuKuXuanZe.ofac_no := ofac_no;
    frmCaiGouShouLiouRuKuXuanZe.Visible := True;
    frmCaiGouShouLiouRuKuXuanZe.BringToFront;

  end
  else
  begin
    frmCaiGouShouLiouRuKuXuanZe := TfrmCaiGouShouLiouRuKuXuanZe.Create(Application);

    frmCaiGouShouLiouRuKuXuanZe.FOnMDIEvent:=OnMDIClose;
    frmCaiGouShouLiouRuKuXuanZe.vou_no := vou_no;
    frmCaiGouShouLiouRuKuXuanZe.ofac_no := ofac_no;
    frmCaiGouShouLiouRuKuXuanZe.ShowModal;  //用show需要在窗体的Close事件里面加nil释放语句;
    frmCaiGouShouLiouRuKuXuanZe.BringToFront;

  end;

end;

procedure TfrmCaiGouShouLiouRuKuXuanZe.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DST_CAILIAO.Close;
   if Assigned(FOnMDIEvent) then FOnMDIEvent(Self);

end;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值