求助,动态创建多个子窗口,关闭创建窗口时出错!

lbd8848 2005-09-12 04:44:02
var
f1:tform;
frmadd:integer;

procedure TForm1.tiponclick(Sender: TObject);
begin
(sender as Tform).Close;//关闭时出错.
(sender as Tform).Free;
end;
procedure TForm1.Myfrom(info:string);

begin
frmadd:=frmadd+1;
f1:=tform.Create(self);
f1.Name:='f1'+inttostr(frmadd);
...
f1.Width:=180;
f1.Height:=120;
f1.Visible:=true;
f1.Enabled:=true;
f1.OnClick:=tiponclick;
end;
只创建一个窗口时,不会出错,多个就不行,请帮忙,谢谢!
...全文
218 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2005-09-13
  • 打赏
  • 举报
回复
duanhai(段海)的方法不错
aiirii 2005-09-13
  • 打赏
  • 举报
回复
>> (sender as Tform).Close;//关闭时出错.
>> (sender as Tform).Free;

该为 :
close;
应该就可
duanhai 2005-09-13
  • 打赏
  • 举报
回复
to 樓主

你的程序只能建立一個窗體,在建立多個的時候,會出現內存洩漏

我來貼一段代碼給你

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
protected
m_FormCount: Integer;
procedure CreateForms;
procedure FormClose_Self(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
CreateForms;
end;

procedure TForm1.CreateForms;
begin
with TForm.Create(nil) do
begin
Name := 'Muilter_' + IntToStr(m_FormCount);
Inc(m_FormCount);

Caption := Name;
Parent := Self;
OnClose := FormClose_Self;
Show;
end;
end;

procedure TForm1.FormClose_Self(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
m_FormCount := 1;
end;

end.


lbd8848 2005-09-13
  • 打赏
  • 举报
回复
回复smilewalk(笑行):创建的子窗口名称没有重复的.f1.Name:='f1'+inttostr(frmadd);

回复g961681(技术庸人)这是一个自定义过程.
显示为f1.Visible:=true;

发现问题了,是(sender as Tform).Free;这一句出错,去掉这一句就好.
lbd8848 2005-09-13
  • 打赏
  • 举报
回复
仔细看了一下真的存在內存洩漏,谢谢duanhai(段海),真得不错呀.
但还有两个问题能否帮忙;谢谢
1.如果在动态创建的子窗口里,创建控件,如何指定其parent.
2.如何实现鼠标点击窗口即可关闭并释放窗口.
g961681 2005-09-12
  • 打赏
  • 举报
回复
这里的代码没什么错误,如果有问题应该在其他地方的错误!
只有一个疑问:你的form怎么没show!
smilewalk 2005-09-12
  • 打赏
  • 举报
回复
多个主窗体怎么可以重名那(f1)
稍微详细地说一下:
f1是你生成的窗体的引用,也可以理解成指针,既然第一次指针已经有指向了,那么再生成窗体的时候,就会出现错误了,f1已经无法确定是需要指向新窗体还是老窗体了,换名字就好了.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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