我正在使用 delphi 7 开展项目,该项目是一个维护项目,我不是该项目的原始编码器,我有一种情况需要关闭可用< / strong>在某些情况下通过代码创建后的表单,表单是模型
这是
的示例代码 var
frmStratum : TfrmStratum;
begin
if not assigned(frmStratum) then myMainForm.OnExecute(PropAction);
end;
在myMainForm.OnExecute(PropAction)中;我有
frmStratum := TfrmStratum.Create(Self, Self as IStratum,inttostr(m_surveyno),Module,m_stations,false);
现在 TfrmStratum 的程序TfrmStratum.FormActivate 我做了大量的计算并写入数据库
var
if (bMassStratumExport) AND (bDoneOne) then
begin
//write to database..
end;
现在我必须至少 20次
1. Create the form
2. onactivate do database writing
3. close TfrmStratum
因为它是一种模态形式,所以我无法关闭,如果低于我创建它的位置,所以我想在第2步
完成后立即关闭它onactivate现在我尝试了这个
if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
begin
//do database writing
if bNowClo then frmStratum.close;
end
编辑:(编辑以使问题更清晰)
表单的停用(frmStratum),我想关闭模态表单(frmStratum),所以我这样做
procedure TfrmStratum.FormActivate(Sender: TObject);
begin
if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
begin
//do database writing
if bNowClo then self.close;// i need to close the form after after doing database write
end
end;
但是窃听时的控件转到self.close但它没有关闭表单。 如何解决这个问题?
答案 0 :(得分:5)
假设它的frmStatum是无效的,它会给你A / V异常
如果bNowClo那么self.close;
答案 1 :(得分:5)
过去当我需要在激活期间关闭表单时,我向自己发布了一条消息,而不是调用self.close。
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
我试图找到我指向这个方向的原始来源,但我找不到它。
PostMessage将立即返回,而不是等待处理该消息。完成OnActivate函数并且Delphi处理循环处理消息后,将在您的表单上调用close消息。