我习惯用事件驱动。
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;