关于窗体继承的几个问题,请OO高手帮忙解答,谢谢!
假定祖先窗口为frmAncestor,后代窗口为frmChild
1.在祖先窗口的某个事件中要关闭窗口自身,应该怎么写?
frmAncestor中写
if a = b then
frmAncestor.Close;
在frmChild中上述语句出错,原因是没有frmAncestor这个实例,frmAncestor.Close并不会关闭后代窗口frmChild。
我现在的处理办法是专门写一个关闭窗体的纯虚过程CloseSelf,每个后代窗口实现各自的关闭窗口语句:
procedure TfrmChild.CloseSelf(Sendor:TObject);Override;
begin
frmChild.Close
end;
在祖先窗口中将上述语句改为:
if a = b then
CloseSelf(Sendor);
请问还有更好的办法吗?
2.在祖先窗口的某个事件中作一个判断,如果条件成立则Exit,不再执行下面的语句;在后代窗口的这个事件inherited后还要添加一些语句,但是我发现好像上面所作的判断成立Exit以后,后代窗口新增加的语句仍然会执行。
frmAncestor中:
rocedure TfrmAncestor.abc();
begin
if a = b then
exit;
end
frmChild中
procedure TfrmChild.abc();
begin
inhetrited;
ShowMessage('Run here');
end
即使a=b,仍然会显示“Run here”对话框,请问这种情况应该怎么做才是正确的?