如何关闭父控件self.Parent.Free;??

roc_fu 2005-10-25 09:42:18
我在一个PageControl,然后再在上面动态建立TableSheet,再建立窗体与TableSheet之上,代码如下
申明:
frmProgramFile : TfrmProgramFile;
pgWinRect: TPageControl;

住窗体创建子窗体的代码:
procedure TfrmMain.btnSendTaskClick(Sender: TObject);
var
tab : TTabSheet;
begin
if findForm('frmProgramFile')=false then
begin
try
tab := TTabSheet.Create(pgWinRect);
tab.PageControl := pgWinRect;
tab.Show;
frmProgramFile := TfrmProgramFile.Create(self);
frmProgramFile.Parent := tab;
frmProgramFile.Align := alClient;
frmProgramFile.BorderStyle := bsNone;
frmProgramFile.Show;
tab.Caption := frmProgramFile.Caption;
except
//....
end;
end;


子窗体想要关闭父控件,也就是上一级的TableSheet
procedure TfrmProgramFile.SpeedButton4Click(Sender: TObject);
begin
{ ClearWindows;
self.Parent.Visible := FALSE;
self.Close;
self.Parent.Free;}
或者:
frmProgramFile.Parent.Free;
end;

上面注释掉的地方也试过,的确能关闭父控件,但关闭之后,必报内存错误,哪位兄弟给指点一下?
...全文
159 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
roc_fu 2005-10-27
  • 打赏
  • 举报
回复
算了,用了个笨办法搞定了
ly_liuyang 2005-10-26
  • 打赏
  • 举报
回复
采用PostMessage的异步处理才能的
需要自定义消息来处理的

_____________________
http://lysoft.7u7.net
susdj 2005-10-26
  • 打赏
  • 举报
回复
PostMessage(Parent.Handle,WM_CLOSE,0,0);
freshui 2005-10-26
  • 打赏
  • 举报
回复
啊?
roc_fu 2005-10-25
  • 打赏
  • 举报
回复
这是不行的,free那里就抱错了
aiirii 2005-10-25
  • 打赏
  • 举报
回复
如果是: tab := TTabSheet.Create(pgWinRect);

那你的 tab 不用自己手工删除也可,系统会自动删除它的

要不,你可能要用

PageControl1.Pages[i].Free;
PageControl1.Pages[i] := nil;
试下
roc_fu 2005-10-25
  • 打赏
  • 举报
回复
这个错误又Try...except不掉
roc_fu 2005-10-25
  • 打赏
  • 举报
回复
最可气的是,并非每个页面关闭都报错,随即的,大概有1/2的概率,但页面确实关掉了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧