我可以使用普通的Delphi按钮来完成这个操作:
在第一个框架中,我有以下内容(简化):
procedure FirstFrame.ButtonClick(Sender: TObject)
Begin
if TButton(Sender).ModalResult = mrOK then
ChildFrame.DoOKStuff
else
ChildFrame.DoCancelStuff;
ChildFrame.Free;
end;
procedure FirstFrame.ShowFranme;
begin
ChildFrame := TFrameWithButtons.Create(Owner);
ChildFrame.Parent := self;
ChildFrame.OKButton.OnClick := ButtonClick;
ChildFrame.CancelButton.OnClick := ButtonClick;
ChildFrame.Visible := True;
end;
在Childframe中,我不需要处理按钮点击...按钮点击已经设置为返回控制到第一帧。
对于某些第三方按钮,这有时会导致AV。我理解原因 - 在第三方代码处理的某个时刻,返回到一个现在释放的框架或按钮,但调用的代码在第一帧中...令人恼火的是,它只工作99.99%的时间 :)
帧没有释放过程。
所以我的问题是如何正确处理这种情况?
使用Delphi 6和Delphi 2009。
ChildFrame
是FirstFrame
的一个字段,你应该调用FreeAndNil(ChildFrame)
而不是ChildFrame.Free
。后者可能会导致它在0%的情况下工作...即使现在它99%的时间都能正常工作,但它未必总是能给出正确的结果。 - Ken Bourassa